目前正在为我雇主的一个内部 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()
将按预期通过。
但是,第一个方法 testGetWindowSize()
现在将失败并出现 org.mockito.exceptions.misusing.UnfinishedVerificationException
。然后继续在 testMaximizeWindow()
方法中指示此 Mockito.verify()。
关于我如何滥用 verify()
或者我需要做什么来“完成”它有什么想法吗?
最佳答案
Verify(mock) 不会自行验证某些内容。你应该说出你到底想验证什么。 例如,如果您创建如下测试:
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());
在您测试方法 add 被调用一次(验证的默认值)时使用任何参数
关于java - 为什么 Mockito.verify 未能通过与我放置的测试不同的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25379374/