Yes, I did discuss the pros and cons of them in this post http://www.nabble.com/any-struts-2-unit-testers-out-there--to13437046.html#a16490696
Cheers, Paul B. dkarr wrote: > > And did you investigate using either of the common Java frameworks for > Mock objects, jMock and EasyMock? > >> -----Original Message----- >> From: paulbrickell [mailto:[EMAIL PROTECTED] >> Sent: Friday, April 04, 2008 3:04 AM >> To: user@struts.apache.org >> Subject: RE: any struts 2 unit testers out there? >> >> >> Actually thats an interesting post. To my mind it doesn't >> demonstrate a solution. It demonstrates the problem. >> >> Here is why I think this. >> >> Struts 2 is just frankly brilliant for people doing test >> first development. >> The classes you create really are POJOs. There are no >> dependencies on any framework in my action classes. For >> example parameters are parsed well away from my action and >> the values are set using simple properties, things like >> sessions are simply maps. It is a truly new world for those >> of who have suffered the horror of mocking http requests, >> responses, context and the like. >> >> But this simple scenario brings all that pain flooding back. >> I add a line in my action like this... >> >> String yadaYada = getText("some.doodad"); >> >> And my lovely world comes unraveled real quick. Now I need >> mock objects up the ying-yang. >> >> I started using the tutorial from the link posted (I am an >> Arsenal fan btw, so got two for the price of one, thanks), >> but it still doesn't provide a simple solution to the >> problem. To get this to work I have to build not just the >> application context but a mass of supporting objects to get a >> (partial) web application framework up and running before I >> can test my simple POJO. >> >> I am not going to give up just yet, but I think I am still >> going to have to look for another way. >> >> Cheers, >> Paul B. >> >> >> >> >> Relph,Brian wrote: >> > >> > >> > I recommend creating an action context. Here is the basic guide I >> > followed to do so: >> > >> > >> http://arsenalist.com/2007/06/18/unit-testing-struts-2-actions-spring- >> > junit/ >> > >> > If you are not using spring or the struts2 spring plugin, >> you can cut >> > out all the code around the applicationContext. >> > >> > >> > -----Original Message----- >> > From: paulbrickell [mailto:[EMAIL PROTECTED] >> > Sent: Thursday, April 03, 2008 11:44 AM >> > To: user@struts.apache.org >> > Subject: Re: any struts 2 unit testers out there? >> > >> > >> > I am trying to deal with the same issue. Did you get any resolution? >> > >> > Following on from the reply asking for a stack trace, here >> is what I >> > am getting... >> > >> > >> > java.lang.NullPointerException >> > at >> > >> com.opensymphony.xwork2.util.LocalizedTextUtil.findText(Locali >> zedTextUtil.java:299) >> > at >> > >> com.opensymphony.xwork2.TextProviderSupport.getText(TextProvid >> erSupport.java:172) >> > at >> > >> com.opensymphony.xwork2.TextProviderSupport.getText(TextProvid >> erSupport.java:87) >> > at >> com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:80) >> > <SNIP> >> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> > at >> > >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess >> orImpl.java:39) >> > at >> > >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth >> odAccessorImpl.java:25) >> > at java.lang.reflect.Method.invoke(Method.java:585) >> > at >> org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59) >> > at >> > >> org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRo >> adie.java:98) >> > at >> org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79) >> > at >> > >> org.junit.internal.runners.MethodRoadie.runBeforesThenTestThen >> Afters(MethodRoadie.java:87) >> > at >> org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77) >> > at >> org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42) >> > at >> > >> org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod( >> JUnit4ClassRunner.java:88) >> > at >> > >> org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4 >> ClassRunner.java:51) >> > at >> > >> org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4Class > Runner.java:44) >> > at >> > >> org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoa >> die.java:27) >> > at >> > >> org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadi >> e.java:37) >> > at >> > >> org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRu >> nner.java:42) >> > at >> > >> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run >> (JUnit4TestReference.java:38) >> > at >> > >> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestEx >> ecution.java:38) >> > at >> > >> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTest >> s(RemoteTestRunner.java:460) >> > at >> > >> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTest >> s(RemoteTestRunner.java:673) >> > at >> > >> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(Rem >> oteTestRunner.java:386) >> > at >> > >> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTest >> > Runner.java:196) >> > >> > >> > It is caused by ActionContext.getContext() returning null. Quite >> > obviously I do not have an action context during my unit testing. >> > >> > Now I can certainly use the ActionContext.setContext() in my tests >> > setup method to push one into thread local storage and that >> works OK. >> > It isn't ideal though because ActionContext is a concrete >> class and so >> > my choices then become a bit limited. >> > >> > I could create an instance but when I try this I find I >> have to create >> > a rather large object model to make it actually work. To the point >> > where I despair and give up. >> > >> > Alternatively I could use a mock library (like easy mock). But I am >> > not inclined to include a mocking library that requires byte code >> > rewriting (not even for testing). >> > >> > What I really want to do is inject a text provider into the >> > ActionSupport class. At the top of the ActionSupport class >> is this... >> > >> > private final transient TextProvider textProvider = new >> > TextProviderFactory().createInstance(getClass(), this); >> > >> > Damn its final and so I cannot inject my own text provider. >> > >> > BUT it uses a factory, thats good. I know I will have a look at the >> > factory I bet I can monkey with that and inject a mock. >> Nope. It's all >> > instance based. No way I can get in there. And thats that. >> Now what do >> > I do? >> > >> > I can see two (half) workable solutions. >> > >> > One is to override the the getText method in the action >> class when I >> > instantiate it during testing. So I end up doing this in >> all my action >> > unit tests... >> > >> > Action action = new MyAction() >> > { >> > @Override >> > public String getText(String textName) >> > { >> > return "mocked"; >> > } >> > }; >> > >> > It works, but its cheese. >> > >> > Or two I can add a level of indirection in my action class, >> like so... >> > >> > >> > String text = >> > >> MyTextProviderFactory.getInstance(class.name).getText("some.property") >> > ; >> > >> > Then I can use a delegate to the real text provider during >> live code >> > and a mock of my own text provider during testing. The >> question here >> > is, Why for the love of Pete, why? >> > >> > So in conclusion there are at least four options for testing Action >> > classes that use get text. >> > >> > 1. Build an action context by hand. (Too hard) 2. Use a class >> > rewriting mocking library. (Not on my watch) 3. Mock the get text >> > method. (Cheese) 4. Add another level of indirection. (Man >> thats just >> > annoying) >> > >> > Comments? >> > >> > BTW If you got this far, thanks for taking the time. >> > Paul B. >> > >> > >> > >> > >> > Session Mwamufiya wrote: >> >> >> >> Hi All, >> >> >> >> Would someone let me know whether it's possible to tweak >> something so >> >> that JUnit test code can run on an action method that calls the >> >> ActionSupport method getText() to fetch string resources from a >> >> package.properties file. >> >> As it stands, I keep getting a null exception when getText() is >> >> called during the unit test. >> >> >> >> Thanks, >> >> Session >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> >> >> >> >> > >> > -- >> > View this message in context: >> > >> http://www.nabble.com/any-struts-2-unit-testers-out-there--tp13437046p >> > 16467812.html Sent from the Struts - User mailing list archive at >> > Nabble.com. >> > >> > >> > >> --------------------------------------------------------------------- >> > To unsubscribe, e-mail: [EMAIL PROTECTED] >> > For additional commands, e-mail: [EMAIL PROTECTED] >> > >> > >> ---------------------------------------------------------------------- >> > CONFIDENTIALITY NOTICE This message and any included >> attachments are >> > from Cerner Corporation and are intended only for the >> addressee. The >> > information contained in this message is confidential and may >> > constitute inside or non-public information under international, >> > federal, or state securities laws. Unauthorized forwarding, >> printing, >> > copying, distribution, or use of such information is strictly >> > prohibited and may be unlawful. If you are not the >> addressee, please >> > promptly delete this message and notify the sender of the delivery >> > error by e-mail or you may call Cerner's corporate offices >> in Kansas City, Missouri, U.S.A at (+1) (816)221-1024. >> > >> > >> --------------------------------------------------------------------- >> > To unsubscribe, e-mail: [EMAIL PROTECTED] >> > For additional commands, e-mail: [EMAIL PROTECTED] >> > >> > >> > >> >> -- >> View this message in context: >> http://www.nabble.com/any-struts-2-unit-testers-out-there--tp1 > 3437046p16490696.html >> Sent from the Struts - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- View this message in context: http://www.nabble.com/any-struts-2-unit-testers-out-there--tp13437046p16511093.html Sent from the Struts - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]