【发布时间】:2017-07-11 17:49:33
【问题描述】:
我正在尝试通过带有 Powermock (1.7.0RC2)、Mockito2 (2.4.0) 和 TestNG (6.8.21) 的 Groovy 类中的 new 运算符来模拟实例创建。但通常的方法是行不通的。这是我的课程和测试。
public class A {
public String send() {
B b = new B();
return b.send();
}
}
public class B {
public String send() {
return "SendFromOriginB";
}
}
@PrepareForTest([A.class])
class TestConstructor extends PowerMockTestCase {
@Mock
private B bMock
@Test
void test() {
A a = new A()
given(bMock.send()).willReturn("Send from B mock")
PowerMockito.whenNew(B.class).withNoArguments().thenReturn(bMock)
assertEquals(a.send(), "Send from B mock")
}
}
问题在于 A 类是一个 Groovy 类。而且似乎 Powermock.whenNew 不知道 new B() 正在调用。
因此,var b 包含 B 类的 普通实例 而不是 mock 并且测试失败。但是,如果 A 类是 Java 类,那么测试会按我的预期工作,并且 var b 包含我的 mock。 Groovy 通过自己的方式创建实例,我无法正确模拟它们。
有人知道如何在 Groovy 类中模拟实例创建吗?
【问题讨论】:
-
您能否提供完整的可运行脚本,包括
@Gape()和imports? -
@alex-voronkov 你有没有想过如何模拟 Groovy 类的实例创建?我有同样的问题
标签: unit-testing groovy mockito testng powermock