Java问题 - 获取与Mockito相关的错误

时间:2009-11-17 15:12:09

标签: java mockito

当我运行测试时,我正在使用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,所以我怀疑我的错误与我的系统配置有关。任何帮助将不胜感激!谢谢!

3 个答案:

答案 0 :(得分:3)

Mockito对objenesishamcrest库有一些外部依赖关系,第37行尝试从objensis库构建对象。

请改用mockito-all-1.8.jar

答案 1 :(得分: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的方法,如上所示。

答案 2 :(得分:0)

您正在运行的测试没有测试任何内容,也没有尝试验证任何交互。模拟在面向对象的系统中用于指定对象如何相互交互 - 因此要检查一个对象是否告诉其他对象执行操作。

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

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

这个过程在一本名为“增长的面向对象软件,测试指导”的书中得到了很好的描述。