【发布时间】:2016-03-04 16:48:02
【问题描述】:
我是新的 TestNG 和一般的单元测试。我将 TestNG 6.9.6 与 Mockito 1.10.19 和 PowerMock 1.6.4 一起使用。我想验证MyService 类中的myMethod() 方法是否在内部使用正确的参数调用静态方法Util.myStaticMethod。由于 Mockito 本身不支持对静态方法的验证,因此我将 PowerMock 与它一起使用。我的测试类如下所示:
public class MyTest
{
private MyService myService;
@Captor ArgumentCaptor<String> argCaptor;
@BeforeMethod
public void setup()
{
MockitoAnnotations.initMocks( this );
myService = new MyService();
}
@Test
@PrepareForTest(MyService.class)
public void myTest()
{
PowerMockito.mockStatic(Util.class);
myService.myMethod("arg");
PowerMockito.verifyStatic(10);
Util.myStaticMethod(anyString());
}
}
这个测试预计会失败,因为myMethod 只调用了一次静态方法Util.myStaticMethod()。但是当我运行测试时,它总是通过,无论我将什么值传递给PowerMockito.verifyStatic()。
另外,如果我在这个类中编写另一个测试方法然后运行测试,我会得到以下错误
org.mockito.exceptions.misusing.UnfinishedVerificationException:
Missing method call for verify(mock) here:
-> at mypackage.MyTest.myTest(MyTest.java:21)
Example of correct verification:
verify(mock).doSomething()
Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.
at mypackage.MyTest.myTest.setup(MyTest.java:10)
Results :
Failed tests:
MyTest.setup:10 UnfinishedVerification
Missing method call for ver...
Tests run: 3, Failures: 1, Errors: 0, Skipped: 1
它在verifyStatic() 方法上失败了,这让我认为 verifyStatic() 方法需要更多我没有提供的东西。此外,它表示测试总数为 3,而在这种情况下,我只有两种测试方法。
任何帮助将不胜感激。
编辑:按照建议,我尝试将MyUtil 类放在@PrepareForTest 注释中,它仍然给出相同的错误。
【问题讨论】:
标签: java unit-testing mockito testng powermock