groovy.lang.MissingMethodException 使用 PowerMock 和 Jenkins getItemByFullName
groovy.lang.MissingMethodException With PowerMock and Jenkins getItemByFullName
如何使用 PowerMockito 确保 Jenkins 静态方法 returns 我的模拟对象?
我看到如果我有一个测试,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)
}
对我来说是个大问题。 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
class 的静态方法。
如何使用 PowerMockito 确保 Jenkins 静态方法 returns 我的模拟对象?
我看到如果我有一个测试,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)
}
对我来说是个大问题。 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
class 的静态方法。