【发布时间】:2014-10-12 07:33:35
【问题描述】:
目前正在为我雇主的一个内部 Java 项目开发单元测试。
虽然我在 SFDC Apex 平台上拥有丰富的单元测试经验,但我在 Java 方面的背景相当有限,而且我仍然在思考如何使用 Mockito 等库。
目前,我被一个涉及使用 Mockito.verify 的非常奇怪的测试失败所困扰。这很奇怪,因为 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() 或我需要做些什么来“完成”它?
【问题讨论】:
标签: java unit-testing exception mockito verify