目前正在为我的雇主的一个内部Java项目开发单元测试。
虽然我在SFDC Apex平台上拥有丰富的单元测试经验,但我在Java方面的背景却相当有限,而且我仍然围绕使用Mockito等库来解决问题。
目前,我被一个涉及使用Mockito.verify的非常奇怪的测试失败所困扰。这很奇怪,因为验证似乎按预期工作,但包括它会导致不同的测试失败。
更具体地说,我有两种测试方法:
/**
* Test of getWindowSize method, of class DefaultWindowHandler.
*/
@Test
public void testGetWindowSize() {
System.out.println("getWindowSize");
// GIVEN
final WebDriver mockWebDriver = mock(WebDriver.class);
final DefaultWindowHandler defaultWindowHandlerUnderTestInstance = new DefaultWindowHandler(mockWebDriver);
Options mockOptions = mock(Options.class);
Window mockWindow = mock(Window.class);
Dimension dummyDimension = new Dimension(1, 2);
// WHEN
when(mockWebDriver.manage()).thenReturn(mockOptions);
when(mockOptions.window()).thenReturn(mockWindow);
when(mockWindow.getSize()).thenReturn(dummyDimension);
final Dimension result = defaultWindowHandlerUnderTestInstance.getWindowSize();
// THEN
assertEquals(dummyDimension, result);
}
/**
* Test of maximizeWindow method, of class DefaultWindowHandler.
*/
@Test
public void testMaximizeWindow() {
System.out.println("maximizeWindow");
// GIVEN
final WebDriver mockWebDriver = mock(WebDriver.class);
final DefaultWindowHandler defaultWindowHandlerUnderTestInstance = new DefaultWindowHandler(mockWebDriver);
Options mockOptions = mock(Options.class);
Window mockWindow = mock(Window.class);
// WHEN
when(mockWebDriver.manage()).thenReturn(mockOptions);
when(mockOptions.window()).thenReturn(mockWindow);
defaultWindowHandlerUnderTestInstance.maximizeWindow();
// THEN
// FIXME: If this is not commented out, a testGetWindowSize will fail!
//Mockito.verify(mockWindow);
}
正如代码当前所示,"Mockito.verify(mockWindow);"
被注释掉,两个测试都将通过。
如果我删除//
注释标记并允许进行验证,则第二种方法testMaximizeWindow()
将包含验证,将按预期传递。
HOWEVER ,第一种方法testGetWindowSize()
现在将以org.mockito.exceptions.misusing.UnfinishedVerificationException
失败。然后继续在testMaximizeWindow()
方法中指出这个Mockito.verify()。
我是如何误导verify()
或我需要做什么才能“完成”的?
答案 0 :(得分:3)
验证(模拟)不会自行验证某些内容。你应该说明你要用什么魔杖来验证。 例如,如果您创建类似的测试:
List mock = mock(ArrayList.class);
verify(mock);
你会得到例外:
org.mockito.exceptions.misusing.UnfinishedVerificationException:
Missing method call for verify(mock) here:
-> at StackOverflowTest.testMockito(StackOverflowTest.java:72)
Example of correct verification:
verify(mock).doSomething()
正确测试的例子:
List mock = mock(ArrayList.class);
mock.add(new Object());
verify(mock).add(any());
在测试该方法的地方,使用任何参数
调用一次(默认为验证)