Thanks for the ideas here. There are indeed a set of redundant spy instances in the file sent. I will clean those up. I think I'm close to getting this worked out...
On Tue, Jul 9, 2019 at 4:47 PM Ullrich Hafner <[email protected]> wrote: > This topic reminds me of one of my architecture guidelines I’m presenting > students in my testing lecture: > An application should always provide a way to change (or inject) the > current date (time). Seems that this is not only relevant in business > applications ;-) > > I also faced a similar problem when trying to test the time series of the > warnings charts (several builds over several days). I solved the problem by > wrapping each build into an own object that has a time instance that can be > changed in tests. > > Your code creates a lot of freestyle build spy instances that are actually > never used. The EnhancedOldBuildDiscarder > gets the builds using Jenkins API. So your spy is never used in the test. > You need to replace the builds in the job with your spy instances. > > Am 09.07.2019 um 21:33 schrieb Gavin Mogan <[email protected]>: > > So I'd personally try stubbing out calendar, and let jenkins take care of > the rest. Purely pseudo code, untested by me. > > > @PrepareForTest({Class1.class, Class2.class}) > class YourClassHere { > > yourFunctionHere() { > > PowerMockito.mockStatic(Calendar); > mockCalendarInstance = mock(Calendar.class); > PowerMockIto.when(Calendar.getInstance()).thenReturn(mockCalendarInstance); > > FreeStyleProject testProject = jRule.createFreeStyleProject("test")) > > foreach timestamps { > mockCalendarInstance.setTime.... > jRule.assertBuildStatus(Result.SUCCESS, project.scheduleBuild2(0).get())); > } > > > On Tue, Jul 9, 2019 at 10:38 AM 'Benjamin Beggs' via Jenkins Developers < > [email protected]> wrote: > >> I've rewritten the test using JenkinsRule. The result is here: >> https://github.com/jenkinsci/enhanced-old-build-discarder/blob/839210ca60694be6ad9b2152e671d39f82174ee5/src/test/java/org/jenkinsci/plugins/enhancedoldbuilddiscarder/EnhancedOldBuildDiscarderTest.java >> . >> >> This is a much cleaner, less finicky implementation. However, my attempt >> to mock the time stamps for the builds isn't working. Does anyone have an >> idea for why this is? >> >> On Monday, July 8, 2019 at 6:58:44 PM UTC-4, Gavin Mogan wrote: >>> >>> You can probably use powermock to override the static >>> Calendar.getInstance() >>> >>> But I don't easily know if that function is used to generate the >>> internal build time, but you can probably track it down with a breakpoint >>> in build.class >>> >>> On Mon, Jul 8, 2019 at 3:36 PM 'Benjamin Beggs' via Jenkins Developers < >>> [email protected]> wrote: >>> >>>> I think a full implementation with Mockito is untenable. It seems I >>>> would need to mock an excessive amount of function returns and the result >>>> may still be inflexible and finnicky. >>>> >>>> I'll follow the JenkinsRule method you're talking about...I expect I >>>> can still mock the date data. Thanks for the help here. :) >>>> >>>> On Monday, July 8, 2019 at 6:08:33 PM UTC-4, Gavin Mogan wrote: >>>>> >>>>> That shouldn't be the case if you use JenkinsRule, actually create the >>>>> project, and run a quick echo pipeline a few times. >>>>> >>>>> I know from working on the java 11 stuff, that mockito has trouble >>>>> mocking functions that are final, it'll silently not do so. Its going to >>>>> save you a ton of headaches to use JenkinsRule. >>>>> >>>>> @Rule >>>>> public JenkinsRule j = new JenkinsRule() >>>>> >>>>> p = j.createFreeStyleProject("name"); >>>>> jenkins.assertBuildStatus(Result.SUCCESS, p.scheduleBuild2(0)); // >>>>> build 1 >>>>> jenkins.assertBuildStatus(Result.SUCCESS, p.scheduleBuild2(0)); // >>>>> build 2 >>>>> jenkins.assertBuildStatus(Result.SUCCESS, p.scheduleBuild2(0)); // >>>>> build 3 >>>>> >>>>> but i see you are messing with dates, so that might be trickier, i'm >>>>> not sure. >>>>> >>>>> You can try subclassing FreeStyleProject, and overriding the function >>>>> to return the value you want. >>>>> If that works fine, then its how the function matching/overriding >>>>> works in mockito, if it doesn't work, then its the weird final/static >>>>> stuff >>>>> that mockito has trouble with. You might need to also use powermock and >>>>> prepare for test. >>>>> >>>>> On Mon, Jul 8, 2019 at 12:40 PM 'Benjamin Beggs' via Jenkins >>>>> Developers <[email protected]> wrote: >>>>> >>>>>> The issue here is with my build history instantiation. All build >>>>>> retrieve calls return null regardless of method (getFirstBuild, >>>>>> getLastBuild, getBuildByNumber, etc). >>>>>> >>>>>> On Monday, July 8, 2019 at 3:24:47 PM UTC-4, Benjamin Beggs wrote: >>>>>>> >>>>>>> I will investigate this further, thanks for pointing this >>>>>>> implementation out to me. >>>>>>> >>>>>>> On Monday, July 8, 2019 at 1:52:40 PM UTC-4, Jesse Glick wrote: >>>>>>>> >>>>>>>> On Mon, Jul 8, 2019 at 1:39 PM 'Benjamin Beggs' via Jenkins >>>>>>>> Developers >>>>>>>> <[email protected]> wrote: >>>>>>>> > Do you have an example of a similar implementation for unit >>>>>>>> testing using jenkinsrule? I may try just porting the tests over to >>>>>>>> this. >>>>>>>> >>>>>>>> I would definitely advise using `JenkinsRule` over mocking >>>>>>>> frameworks. >>>>>>>> Slower, but much more realistic (and much more likely to continue >>>>>>>> running after internal refactorings). Example: >>>>>>>> >>>>>>>> >>>>>>>> https://github.com/jenkinsci/jenkins/blob/a6f5b2b1288d15cd2ea5c2fd9b8916e6397bf795/test/src/test/java/hudson/tasks/LogRotatorTest.java#L67-L82 >>>>>>>> >>>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Jenkins Developers" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/jenkinsci-dev/610d3de0-c377-4c4c-bd2d-db00c84b6f41%40googlegroups.com >>>>>> <https://groups.google.com/d/msgid/jenkinsci-dev/610d3de0-c377-4c4c-bd2d-db00c84b6f41%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Jenkins Developers" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/jenkinsci-dev/529dd72d-c30c-44df-83b5-e4ffacfa7694%40googlegroups.com >>>> <https://groups.google.com/d/msgid/jenkinsci-dev/529dd72d-c30c-44df-83b5-e4ffacfa7694%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Jenkins Developers" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/jenkinsci-dev/e8303bf9-4523-4fc2-96cd-45affddef1d1%40googlegroups.com >> <https://groups.google.com/d/msgid/jenkinsci-dev/e8303bf9-4523-4fc2-96cd-45affddef1d1%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to the Google Groups > "Jenkins Developers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jenkinsci-dev/CAAgr96%2Brwq8tgn8LhgXAH_V3%2BPhk8OJWFnQioFtuNp2zZptmpw%40mail.gmail.com > <https://groups.google.com/d/msgid/jenkinsci-dev/CAAgr96%2Brwq8tgn8LhgXAH_V3%2BPhk8OJWFnQioFtuNp2zZptmpw%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to a topic in the > Google Groups "Jenkins Developers" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/jenkinsci-dev/_kNEe9ggaW0/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jenkinsci-dev/D2D18CD8-C489-47F5-A015-3768431752D2%40gmail.com > <https://groups.google.com/d/msgid/jenkinsci-dev/D2D18CD8-C489-47F5-A015-3768431752D2%40gmail.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Jenkins Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/CAMSuSKTBd4gfyTF09E2dsXVW0%2B4h%3DXGHdBr_MkazMFj4Yq5j_Q%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
