我有一个这样的课程
@Component
public class TestClass {
public void testMethod(){
FinalClass f = new FinalClass("string");
somePrivateMethod(f.getSomeString());
}
private void somePrivateMethod(String s){
}
}
正如您所看到的,它有一个公共方法和私有方法。在公共方法中,它实例化一个FinalClass实例,它是某个第三方库中的一个类,它是最终的。让我们说它就像这样
public final class FinalClass {
private final String someString;
public FinalClass(final String s) {
someString = s;
}
public String getSomeString() {
return someString;
}
}
现在我正在为我的测试课编写单元测试。由于我必须验证最终类和私有方法,我使用的是powermockito。这就是我的测试类的样子
@RunWith(PowerMockRunner.class)
@PrepareForTest({TestClass.class, FinalClass.class})
public class TestClassTest {
private TestClass testClass;
private FinalClass finalClass;
@Before
public void setUp() {
finalClass = PowerMockito.mock(FinalClass.class);
testClass = spy(new TestClass());
}
@Test
public void testSomething() throws Exception {
whenNew(FinalClass.class).withAnyArguments().thenReturn(finalClass);
testClass.testMethod();
verifyNew(FinalClass.class);
//verifyPrivate(testClass).invoke("testMethod");
}
}
工作正常。但问题是最后两个语句verifyNew和verifyPrivate是互斥的。我的意思是当我评论其中一个(无关紧要),测试通过。但是当两者都启用时,测试失败 有谁知道为什么会这样?