模拟 jenkins.model.Job 的 getLastSuccessfulBuild 结果 No signature of method is applicable for argument types

Mocking jenkins.model.Job's getLastSuccessfulBuild results in No signature of method is applicable for argument types

RunT 对象似乎没有从 jar 中导出时,您如何使用 PowerMockito 模拟 Jenkins Job 的方法 return a RunT 对象。

在尝试模拟 getLastUnstableBuild 时,我 运行 遇到了麻烦,因为它 return 是一个 RunT,我不确定如何模拟它,因为我无法访问 RunT

我试过使用一个 mock 运行,一个 Build 的 mock,但似乎没有任何效果。

@RunWith(PowerMockRunner.class)
@PrepareForTest([Jenkins.class, Job.class, Run.class, Build.class, UserIdCause.class, BuildServerGlobals.class])
class BuildServerJobManagerTest {
    def thisScript

    def expectedJob = 'job'
    def expecteBuildNumber = '1'
    def expectedUser = 'user'

    @Mock
    private Jenkins jenkins

    @Mock
    private Job job

    @Mock
    private Run run

    @Mock
    private Build build

    ...

PowerMockito.when(jenkins.getItemByFullName(expectedJob)).thenReturn(job)
PowerMockito.when(run.getLastUnstableBuild()).thenReturn(run) //fails
PowerMockito.when(run.getLastUnstableBuild()).thenReturn(build) //fails

失败

groovy.lang.MissingMethodException: 
No signature of method: hudson.model.Run$$EnhancerByMockitoWithCGLIB$$d8adb2d7
.getLastUnstableBuild() is applicable for argument types: () values: []

通用 运行T 不是问题所在。所讨论的方法是 Job class 方法而不是 运行 class 方法的事实是问题所在

PowerMockito.when(job.getLastUnstableBuild()).thenReturn(...)