It looks like .toAbsolute is null, but without it I can not return a String. hmm Any thoughts?
On Wed, Sep 10, 2014 at 2:43 PM, George Christman <gchrist...@cardaddy.com> wrote: > Lance, I think I'm really close lol. I think my struggles have to do with > the concept of having to mock a service. > > Anyhow I have the following mock > > public static PageRenderLinkSource buildPageRenderLinkSource() { > PageRenderLinkSource pageRenderLinkSource = > Mockito.mock(PageRenderLinkSource.class); > > when(pageRenderLinkSource.createPageRenderLinkWithContext(TimeSheet.class, > ETSSEnum.SUPERVISOR, 1L).toAbsoluteURI()).thenReturn("http://test1"); > > when(pageRenderLinkSource.createPageRenderLinkWithContext(TimeSheet.class, > ETSSEnum.SUPERVISOR, 2L).toAbsoluteURI()).thenReturn("http://test2"); > > when(pageRenderLinkSource.createPageRenderLinkWithContext(TimeSheet.class, > ETSSEnum.SUPERVISOR, 3L).toAbsoluteURI()).thenReturn("http://test3"); > > when(pageRenderLinkSource.createPageRenderLinkWithContext(TimeSheet.class, > ETSSEnum.SUPERVISOR, 4L).toAbsoluteURI()).thenReturn("http://test4"); > > when(pageRenderLinkSource.createPageRenderLinkWithContext(TimeSheet.class, > ETSSEnum.SUPERVISOR, 5L).toAbsoluteURI()).thenReturn("http://test5"); > return pageRenderLinkSource; > } > > The service calls it like so > > @Override > public String getTimeSheetURL(TimeSheetEntity timeSheet, ETSSEnum > role) { > System.out.println(role + " " + timeSheet.getId()); > return linkSource.createPageRenderLinkWithContext(TimeSheet.class, > role, timeSheet.getId()).toAbsoluteURI(); > } > > And now I get the following exception, any idea what I might be missing? > > [TestNG] Running: > Command line suite > > [WARN ] (ConfigContext.java:257) - HSEARCH000075: Configuration setting > hibernate.search.lucene_version was not specified, using LUCENE_CURRENT. > [WARN ] (Config.java:360) - You should not use LUCENE_CURRENT as > luceneMatchVersion property: if you use this setting, and then Solr > upgrades to a newer release of Lucene, sizable changes may happen. If > precise back compatibility is important then you should instead explicitly > specify an actual Lucene version. > testSendEmailReport size 5 > supervisor 1 > [ERROR] (OperationTrackerImpl.java:192) - Error invoking method public > static org.apache.tapestry5.services.PageRenderLinkSource > org.healthresearch.etss.services.AppModuleTest.buildPageRenderLinkSource(): > java.lang.NullPointerException > [ERROR] (OperationTrackerImpl.java:193) - Operations trace: > [ERROR] (OperationTrackerImpl.java:202) - [ 1] Realizing service > PageRenderLinkSource > [ERROR] (OperationTrackerImpl.java:202) - [ 2] Instantiating service > PageRenderLinkSource implementation via > org.healthresearch.etss.services.AppModuleTest.buildPageRenderLinkSource() > (at AppModuleTest.java:155) > [ERROR] (OperationTrackerImpl.java:202) - [ 3] Constructing service > implementation via > org.healthresearch.etss.services.AppModuleTest.buildPageRenderLinkSource() > (at AppModuleTest.java:155) > [ERROR] (RecursiveServiceCreationCheckWrapper.java:65) - Construction of > service PageRenderLinkSource failed: Error invoking method public static > org.apache.tapestry5.services.PageRenderLinkSource > org.healthresearch.etss.services.AppModuleTest.buildPageRenderLinkSource(): > java.lang.NullPointerException > org.apache.tapestry5.ioc.internal.OperationException: Error invoking > method public static org.apache.tapestry5.services.PageRenderLinkSource > org.healthresearch.etss.services.AppModuleTest.buildPageRenderLinkSource(): > java.lang.NullPointerException > at > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:184) > at > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:90) > at > org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72) > at > org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1258) > at > org.apache.tapestry5.ioc.internal.util.ConstructionPlan.createObject(ConstructionPlan.java:61) > at > org.apache.tapestry5.ioc.internal.ServiceBuilderMethodInvoker.createObject(ServiceBuilderMethodInvoker.java:61) > at > org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:47) > at > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82) > at > org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72) > at > org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1258) > at > org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:51) > at > org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:30) > at > org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:47) > at > org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:64) > at > org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:55) > at > org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:61) > at > org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:47) > at > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82) > at > org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:72) > at > org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1258) > at > org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:51) > at > org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:67) > at > org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:55) > at $PageRenderLinkSource_4090b27e85db6.delegate(Unknown Source) > at > $PageRenderLinkSource_4090b27e85db6.createPageRenderLinkWithContext(Unknown > Source) > at > org.healthresearch.etss.services.email.impl.EmailHelperImpl.getTimeSheetURL(EmailHelperImpl.java:69) > at > org.healthresearch.etss.services.email.impl.EmailHelperImpl.initiateSupervisorReminder(EmailHelperImpl.java:45) > at $EmailHelper_4090b27e85dbd.initiateSupervisorReminder(Unknown > Source) > at $EmailHelper_4090b27e85dbc.initiateSupervisorReminder(Unknown > Source) > at > org.healthresearch.etss.services.email.impl.EmailServiceImpl.sendSupervisorReminderEmail(EmailServiceImpl.java:123) > at $EmailService_4090b27e85db4.sendSupervisorReminderEmail(Unknown > Source) > at $EmailService_4090b27e85d95.sendSupervisorReminderEmail(Unknown > Source) > at > org.healthresearch.etss.services.email.impl.EmailServiceImplTest.testSendEmailReport(EmailServiceImplTest.java:52) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:601) > at > org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) > at org.testng.internal.Invoker.invokeMethod(Invoker.java:702) > at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894) > at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219) > at > org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) > at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) > at org.testng.TestRunner.privateRun(TestRunner.java:768) > at org.testng.TestRunner.run(TestRunner.java:617) > at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) > at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) > at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) > at org.testng.SuiteRunner.run(SuiteRunner.java:240) > at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53) > at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87) > at org.testng.TestNG.runSuitesSequentially(TestNG.java:1188) > at org.testng.TestNG.runSuitesLocally(TestNG.java:1113) > at org.testng.TestNG.run(TestNG.java:1025) > at org.testng.TestNG.privateMain(TestNG.java:1328) > at org.testng.TestNG.main(TestNG.java:1297) > Caused by: java.lang.RuntimeException: Error invoking method public static > org.apache.tapestry5.services.PageRenderLinkSource > org.healthresearch.etss.services.AppModuleTest.buildPageRenderLinkSource(): > java.lang.NullPointerException > at > org.apache.tapestry5.ioc.internal.util.MethodInvoker.invoke(MethodInvoker.java:63) > at > org.apache.tapestry5.ioc.internal.util.LoggingInvokableWrapper.invoke(LoggingInvokableWrapper.java:43) > at > org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:82) > ... 54 more > Caused by: java.lang.NullPointerException > at > org.healthresearch.etss.services.AppModuleTest.buildPageRenderLinkSource(AppModuleTest.java:156) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:601) > at > org.apache.tapestry5.ioc.internal.util.MethodInvoker.invoke(MethodInvoker.java:52) > ... 56 more > > > > On Wed, Sep 10, 2014 at 1:14 PM, Lance Java <lance.j...@googlemail.com> > wrote: > >> Ah, ok.. >> >> Adding the tapestry web module will cause headaches. I suggest you add >> builder methods to your test module for the specific web dependencies >> required for the service under test. Similar to how the Request is >> currently mocked. >> On 10 Sep 2014 18:09, "George Christman" <gchrist...@cardaddy.com> >> wrote: >> >> > Integration testing. >> > >> > On Wed, Sep 10, 2014 at 1:06 PM, Lance Java <lance.j...@googlemail.com> >> > wrote: >> > >> > > There's 2 types of tests that I feel are getting blurred here >> > > >> > > 1. Unit test - tests a single class. All dependencies are mocked >> > > >> > > 2. Integration test - tests 2 or more services in concert (might >> involve >> > a >> > > tapestry module and an in memory database) >> > > >> > > Which test are you trying to achieve here? >> > > On 10 Sep 2014 17:53, "Lance Java" <lance.j...@googlemail.com> >> wrote: >> > > >> > > > Unit tests don't need a module at all. Your colleague could mock the >> > > > PageRenderLinkSource using Mockito and pass it to the EmailService >> > > > constructor. Then test the hell out of it! >> > > > On 10 Sep 2014 17:41, "George Christman" <gchrist...@cardaddy.com> >> > > wrote: >> > > > >> > > >> Thanks Lance, I figured out the DAO issue :) Anyhow this happens >> to be >> > > my >> > > >> day job project and my co-worker is looking to test his generated >> > > emails. >> > > >> So if I understand you correctly, I need to include the >> tapestry-core? >> > > If >> > > >> so, is that just a mater of including TapestryModule or no? >> > > >> >> > > >> On Wed, Sep 10, 2014 at 12:29 PM, Lance Java < >> > lance.j...@googlemail.com >> > > > >> > > >> wrote: >> > > >> >> > > >> > Hi George, PageRenderLinkSource is a part of the web framework. >> > > >> > >> > > >> > I mentioned before that you could split your app into 2 modules: >> > > >> > api - depends on tapestry-ioc >> > > >> > web - depends on tapestry-core >> > > >> > >> > > >> > The test case I setup for you only tests the api stuff >> > (tapestry-ioc). >> > > >> If >> > > >> > you split into 2 modules this would be easy to see (since >> > > >> > PageRenderLinkSource would not be on the test classpath). >> > > >> > >> > > >> >> > > >> >> > > >> >> > > >> -- >> > > >> George Christman >> > > >> www.CarDaddy.com >> > > >> P.O. Box 735 >> > > >> Johnstown, New York >> > > >> >> > > > >> > > >> > >> > >> > >> > -- >> > George Christman >> > www.CarDaddy.com >> > P.O. Box 735 >> > Johnstown, New York >> > >> > > > > -- > George Christman > www.CarDaddy.com > P.O. Box 735 > Johnstown, New York > > -- George Christman www.CarDaddy.com P.O. Box 735 Johnstown, New York