mockito可以用作增量开发的独立开发工具

时间:2009-08-13 09:22:03

标签: java agile

我正在尝试使用Jmockit API进行独立使用,而不使用任何用于增量开发的框架。 但我无法初始化模拟类的代理

所以我有两个问题。

  1. 我们可以独立于任何测试框架使用JMockIt。
  2. 如果是,如何使用
  3. 谢谢, 阿希什

3 个答案:

答案 0 :(得分:1)

是的,您可以在没有任何测试框架的情况下使用大多数模拟API。

所有模拟API在其简单的界面模拟操作中都是create dynamic proxies(它是核心Java的一部分),它拦截方法调用并根据您设置的期望进行响应。

当你嘲笑类时,由于字节代码操作发生以允许方法调用拦截,但是在此之后它是相同的“基于期望的响应”场景,这有点复杂。显然,如果你在模拟类,你需要包含JMockit使用的任何字节码操作API。

答案 1 :(得分:1)

这个问题的答案是肯定和否定。

是的,如果直接从“main”方法调用,JMockit Annotations API(用于基于状态的测试)可以正常工作。

不,如果直接从“main”调用,JMockit Expectations API(用于基于行为的测试)当前不起作用。发生这种情况是因为它跟踪测试运行程序正在执行的当前测试,该测试运行程序可以是JUnit 3.8,JUnit 4.5+或TestNG 5.8+运行程序。 因此,当不在测试框架(JUnit或TestNG)的上下文中运行时,它缺少必要的测试跟踪信息。

但是,可以改变JMockit期望值。但是运行一个既不用JUnit也不用TestNG或任何其他测试框架(如果存在)的测试套件有什么意义呢?或者你想将它用于与开发人员测试完全不同的东西吗?

答案 2 :(得分:0)

您可以使用它来存储您的数据访问层(DAO,存储库等)。

我选择的模拟框架是Mockito。例如,您可以像这样模拟DAO:

interface UserDAO {

    boolean userExists(String user);
    ...
}

UserDAO userDAO = mock(UserDAO.class);
when(userDAO.userExists("dfa")).thenReturn(true);
when(userDAO.userExists("root")).thenReturn(false);

然后您可以在实施时传递新的存根