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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to