1

如何使用 PowerMockito 确保 Jenkins 静态方法返回我的模拟对象?

我看到如果我有一个测试,詹金斯就是模拟。但是,如果我为其他静态方法添加看起来像有效的 PowerMockito.when 的内容,则会收到以下错误。我难住了。

错误

groovy.lang.MissingMethodException: No signature of method: 
 static jenkins.model.Jenkins.getItemByFullName() is applicable for argument types: 
 (java.lang.String) values: [job]

Possible solutions: 
  getItemByFullName(java.lang.String), 
  getItemByFullName(java.lang.String, java.lang.Class)

代码

@RunWith(PowerMockRunner.class)
@PrepareForTest([Jenkins.class, Job.class])
class MyTest {
    def thisScript

    @Mock
    private Jenkins jenkins

    @Mock Job job

    MyClass myClass

    @Before
    void setUp() {
        PowerMockito.mockStatic(Jenkins.class)
        PowerMockito.when(Jenkins.getInstance()).thenReturn(jenkins)
        PowerMockito.when(Jenkins.getItemByFullName("job".toString())).thenReturn(job)

    }

4

1 回答 1

0

对我来说是一个重大的糟糕。getInstance 方法是静态的,getItemByFullName 不是静态的。所以,这里是修复


@RunWith(PowerMockRunner.class)
@PrepareForTest([Jenkins.class, Job.class])
class MyTest {
    def thisScript

    @Mock
    private Jenkins jenkinsInstance

    @Mock Job job

    MyClass myClass

    @Before
    void setUp() {
        PowerMockito.mockStatic(Jenkins.class)
        PowerMockito.when(Jenkins.getInstance()).thenReturn(jenkins)
        PowerMockito.when(jenkinsInstance.getItemByFullName("job".toString())).thenReturn(job)

    }

我必须模拟实例的方法jenkinsInstance.getItemByFullName而不是Jenkins.class类的静态方法。

于 2019-04-18T22:28:57.840 回答