我正在尝试使用Jmockit API进行独立使用,而不使用任何用于增量开发的框架。 但我无法初始化模拟类的代理
所以我有两个问题。
谢谢, 阿希什
答案 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);
然后您可以在实施时传递新的存根