Java PowerMockito whenNew thenReturn不适用于可传递类
我有以下几种情况Java PowerMockito whenNew thenReturn不适用于可传递类,java,mockito,powermock,Java,Mockito,Powermock,我有以下几种情况 Class A { someMethod() { B b = new B(); b.someMethod(); } } Class B { String someMethod() { C c = new C(); return c.someMethod(); } } Class C { String someMethod() { D d = new D(); return d.getId() } }
Class A {
someMethod() {
B b = new B();
b.someMethod();
}
}
Class B {
String someMethod() {
C c = new C();
return c.someMethod();
}
}
Class C {
String someMethod() {
D d = new D();
return d.getId()
}
}
Class D {
getId() {
return "id123";
}
}
我在UT做什么
@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class, B.class, C.class})
MyTest {
public void basicTest() {
D mockDClass = mock(D.class);
when(mockDClass.getId()).thenReturn("mockedId");
PowerMockito.whenNew(D.class).withAnyArguments().thenReturn(mockClass);
}
}
在我的测试中,它应该返回mockedd
,但控制权转到实际的方法
知道我做错了什么吗?
当我在I类测试中进行新测试时,whenNew
是否有效?而不是我描述的情况
----------------------更新---------------------
编写了一个简单的模块来测试上述内容
public class A {
public String someMethod() {
B b = new B();
return b.someMethod();
}
}
public class B {
public String someMethod() {
C c = new C();
return c.someMethod();
}
}
public class C {
public String someMethod() {
D d = new D();
return d.getId();
}
}
public class D {
public String getId() {
return "id123";
}
}
测试:
该测试的输出如下所示:
这个小测试很有效,所以我在实际测试中犯了一些错误。当您模拟的对象每次被实例化时,新测试都应该有效。实际上,您应该将行'when(D.getId()).thenReturn(“mockedId”)'替换为'when(mockDClass.getId.).thenReturn(“mockedId”)'。 以下代码段应该可以工作: C测试:
@RunWith(PowerMockRunner.class)
@PrepareForTest({C.class})
public class CTest {
@Test
public void someMethodTest() throws Exception {
D mockDClass = mock(D.class);
when(mockDClass.getId()).thenReturn("mockedId");
PowerMockito.whenNew(D.class).withAnyArguments().thenReturn(mockDClass);
C c = new C();
String response = c.someMethod();
verifyNew(D.class).withNoArguments();
assertEquals("mockedId", response);
}
}
D测试:
@RunWith(PowerMockRunner.class)
public class DTest {
@Test
public void testId() throws Exception {
D mockDClass = mock(D.class);
when(mockDClass.getId()).thenReturn("mockedId");
PowerMockito.whenNew(D.class).withAnyArguments().thenReturn(mockDClass);
D d = new D();
verifyNew(D.class).withNoArguments();
String response = d.getId();
assertEquals("mockedId", response);
}
}
哦,很抱歉我实际上有
mockDClass.getid()
,但它不起作用,还更新了问题。你能分享你正在运行的实际测试方法吗?添加了完整的模块吗?我忘了什么时候测试哪个更新起作用了,所以我可能在实际代码中做了一些错误的事情,不过需要帮助
@RunWith(PowerMockRunner.class)
public class DTest {
@Test
public void testId() throws Exception {
D mockDClass = mock(D.class);
when(mockDClass.getId()).thenReturn("mockedId");
PowerMockito.whenNew(D.class).withAnyArguments().thenReturn(mockDClass);
D d = new D();
verifyNew(D.class).withNoArguments();
String response = d.getId();
assertEquals("mockedId", response);
}
}