2

我正在使用 Mockito 库进行 Java 测试,并在运行测试时在 Mockito 中出现错误。(我正在使用 NetBeans IDE,以防万一)。例如,我有一个名为 Animal 的类,我正在尝试执行以下简单测试:

@Test
public void mokito_test(){

    Animal mockAnimal = mock(Animal.class);
    Animal testAnimal2 = mockAnimal;

    assertTrue(mockAnimal.equals(testAnimal2));

}

此测试给出以下错误:

mokito_test caused an ERROR (at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:37))
  at org.mockito.internal.creation.jmock.ClassImposterizer.<init>(ClassImposterizer.java:37)
  at org.mockito.internal.util.CreationValidator.validateType(CreationValidator.java:14)
  at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
...etc.

(还有 11 个错误,包括 java.net、java.security、java.lang 和 sun.misc。)

但是,如果我使用真实对象而不是模拟对象执行此测试,则测试成功:

@Test
public void animal_test(){

    Animal testAnimal1 = new Animal("bear");
    Animal testAnimal2 = new Animal("bear");

    assertTrue(testAnimal1.equals(testAnimal2));

}

本次测试成功。

我已将 Mockito jar 文件 (mockito-core-1.8.0.jar) 下载到我的项目目录中,然后在此特定项目的测试库中引用 jar 文件的相对路径。我以前从未使用过 Mockito,所以我怀疑我的错误与我的系统配置有关。任何帮助将不胜感激!谢谢!

4

3 回答 3

3

Mockito 对库有一些外部依赖objenesishamcrest第 37 行尝试从objensis库中构造一个对象。

请改用mockito-all-1.8.jar

于 2009-11-17T15:28:06.857 回答
0

您是否在 junit 测试中使用 mockito.. 不确定您要测试什么.. 添加所需的 jar 文件(mockito-all jar)后,创建一个像这样的测试。由于您使用的是注释,因此您可以使用 @Mock 创建一个模拟对象

    @RunWith(MockitoJUnitRunner.class)
    public class AnimalTest {

    @Mock
    private Animal mockAnimal;

    @Test
    public void mokito_test(){

        when(mockAnimal.toString()).thenReturn("Some String");

        String toStringResult = mockAnimal.toString();

        //verify(mockAnimal).toString();  -- to verify toString() method called once on the mock
        assertTrue("Some String".equals(toStringResult);

    }
}

如果您的 Animal 类使用 Object C 方法 b,那么您可以像上面所示模拟对象 C 的方法。

于 2009-11-17T18:06:48.563 回答
0

您正在运行的测试没有测试任何东西,也没有尝试验证任何交互。在面向对象的系统中使用模拟来指定对象如何相互交互 - 以便检查一个对象是否告诉其他对象做事。

它们不应该用于测试计算或值对象的状态变化。在这些类型的测试中使用模拟会导致脆弱的测试,因为您只是在复制方法的下划线实现。

因此,值对象上的方法(例如 equals、hashCode、toString)应该始终使用真实对象进行测试。

这个过程在一本名为“Growing Object-Oriented Software, Guided by Tests”的书中得到了很好的描述。

于 2009-11-17T19:18:34.530 回答