Java 使用MockitoJUnitRunner.class而不是SpringJUnit4ClassRunner.class
我有一个关于Java 使用MockitoJUnitRunner.class而不是SpringJUnit4ClassRunner.class,java,unit-testing,junit,Java,Unit Testing,Junit,我有一个关于SpringJUnit4ClassRunner用法的问题。对于纯JUnit或单元测试用例,我们应该使用基于Spring的注释,如@Autowired以及SpringJUnit4ClassRunner,还是应该只使用MockitoJUnitRunner而不是在测试类顶部使用@RunWith注释 我是说替换 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:test-application
SpringJUnit4ClassRunner
用法的问题。对于纯JUnit或单元测试用例,我们应该使用基于Spring的注释,如@Autowired
以及SpringJUnit4ClassRunner
,还是应该只使用MockitoJUnitRunner
而不是在测试类顶部使用@RunWith
注释
我是说替换
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-applicationContext.xml" })
仅仅
@RunWith(MockitoJUnitRunner.class)
在班上名列前茅。它对我有用
在Junits中,我们通常不进行任何外部调用,例如对DB的调用或对其他web服务的调用。我们必须在此服务对象上使用@mock
注释模拟这些外部调用。然后创建我们正在测试的类的真实对象,这取决于这些模拟。然后,我们可以在真实对象上使用@InjectMocks
,以便将模拟对象注入真实对象
示例服务-A->呼叫->服务-B->呼叫->服务-C
在测试A时,我们应该模拟服务B&在测试服务B时,我们应该模拟服务C
一些代码片段
@RunWith(MockitoJUnitRunner.class)
public class TestServiceA {
@Mock
B mockObj;
@InjectMocks
A realObj;
@Test
public void testServiceA() {
.....
.....
}
}
因此,我觉得对于单元测试用例,我们不需要依赖Spring容器来提供我们正在测试的类的实例
请给出你的建议
使用SpringJUnit4ClassRunner.class而不是MockitoJUnitRunner.class如果您试图简单地单元测试一个没有依赖项的类,如您所描述的,那么就不需要使用
SpringJUnit4ClassRunner
。这个运行程序能够使用(测试)应用程序上下文配置中定义的(模拟)对象生成完整的Spring上下文。使用这种机制,SpringJUnit4ClassRunner
比常规的MockitoJUnitRunner
慢得多
SpringJUnit4ClassRunner
对于集成测试非常强大
我默认从
MockitoJUnitRunner
开始,如果我达到了这个运行程序的极限,例如因为我需要模拟构造函数、静态方法或私有变量,我会切换到PowerMockJUnitRunner
。对我来说,这是最后的手段,因为它通常会告诉我代码是“坏的”,而不是为了测试而编写的。独立单元测试通常不需要其他运行程序。基于Sven的答案,假设您需要在模拟数据库位或调用外部服务的同时测试类集合,您可以使用SpringJUnit4ClassRunner运行测试如果您试图将单个Java类作为一个单元进行测试,模拟集成位和本地协作者,那么使用MockitoJUnitRunner运行测试就足够了,而且速度也更快 您的测试不包含任何需要Spring干预的内容,因此显然您不需要它。@SotiriosDelimanolis-谢谢您的回复。这实际上是一个伪代码,类似于我的项目代码。实际上,在开始时,它在类的顶部有SpringJUnit4ClassRunner.class和ContextConfiguration({“classpath:test applicationContext.xml}),并在两个A&B对象上自动连接注释。没有嘲笑。我把它们都拿走了。所以基本上我想知道这种模仿是否是做Junits的正确方法。Spring测试框架也支持模拟对象。如图所示,我正在使用Mockito库来模拟对象。另外,我还以另一种方式思考——我们真的需要Junits中的SpringJUnit4ClassRunner和Spring库吗?可能相关:您可能希望使用Spring概要文件来声明与mock DB相关的内容。在这种情况下,您仍然可以测试spring配置(集成测试)。对于不需要spring的单元测试,可以使用MockitoJUnitRunner。