问题描述
我正在尝试模拟D类构造函数。但是,模拟对象将调用真实函数,而不仅仅是返回值。
从底部读取。
主要
public abstract class F
{
int hi()
{
throw new Exception("I always throw Exception. So don't execute me");
return 1;
}
}
public abstract class E extends F
{
int hi()
{
return super.hi();
}
}
public class D extends E
{
}
public class C
{
D d_object;
C()
{
d_object = new new D(); // will be mocked_d!
}
int hi()
{
d_object.hi();
}
}
public class B
{
void fun()
{
C object = new C();
int value = object.hi();
}`
}
测试
@RunWith(powermockrunner.class)
@powermockrunnerDelegate(SpringJunit4ClassRunner.class)
@PrepareForTest({C.class,D.class})
public class Test_B
{
@Autowired
A o_A;
@Test
public void test_method()
{
D mocked_D = mock(D.class);
powermockito.whenNew(D.class).withNoArguments().then(new Answer()
{
@Override
public Object answer(InvocationOnMock invocation) throws Throwable
{
return mocked_D;
}
});
powermockito.doReturn(2).when(mocked_d).hi();
Assert.assertEquals(2,o_A.fun()) // throws Exception. since method inside class F gets executed.
}
}
F类中的hi()方法总是被调用,因此引发执行。我不想调用该功能。我在做错什么吗?
解决方法
使用@PrepareForTest
时,我总是在测试中使用PowerMockito.mockStatic
方法。