繁体   English   中英

使用MockitoJUnitRunner.class而不是SpringJUnit4ClassRunner.class

[英]Using MockitoJUnitRunner.class instead of SpringJUnit4ClassRunner.class

我对SpringJUnit4ClassRunner的用法有SpringJUnit4ClassRunner 对于纯Junits或单元测试用例,我们应该使用基于Spring的注释,例如@AutowiredSpringJUnit4ClassRunner还是应该只使用MockitoJUnitRunner而不是Test类顶部的@RunWith注释?

我的意思是更换

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-applicationContext.xml" })

只是

@RunWith(MockitoJUnitRunner.class)

在班上。 这个对我有用。

在Junits中,我们通常不会进行任何外部调用,例如调用DB或调用其他Web服务。 我们必须使用此服务对象上的@Mock注释来模拟这些外部调用。 然后创建我们正在测试的类的真实对象,这取决于这些模拟。 然后我们可以在真实对象上使用@InjectMocks ,以便它将被注入@InjectMocks对象。

示例服务-A->呼叫 - >服务-B->呼叫 - >服务-C

在测试A时,我们应该在测试Service-B时模拟服务B,我们应该模拟Service-C。

一些代码片段

@RunWith(MockitoJUnitRunner.class)
public class TestServiceA {
    @Mock
    B mockObj;

    @InjectMocks
    A realObj;

    @Test
    public void testServiceA() {
    .....
    .....
    }
}       

所以,我觉得对于Unit测试用例,我们不需要依赖Spring容器来为我们提供我们正在测试的类的实例。

请提出你的建议。

使用SpringJUnit4ClassRunner.class而不是MockitoJUnitRunner.class

如果您尝试简单地单独测试没有依赖项的类,就像您描述的那样,就不需要SpringJUnit4ClassRunner。 此运行器能够生成完整的弹簧上下文,其中包含您可以在(测试)应用程序上下文配置中定义的(模拟)对象。 使用这种机制,SpringJUnit4ClassRunner比常规的MockitoJUnitRunner慢得多。

SpringJUnit4ClassRunner非常强大,可用于集成测试。

我默认从MockitoJUnitRunner开始,如果我达到了这个运行器的限制,例如因为我需要模拟构造函数,静态方法或私有变量,我切换到PowerMockJUnitRunner。 这对我来说是最后的手段,因为它通常告诉代码是“坏的”而不是写入进行测试。 其他跑步者通常不需要进行隔离单元测试。

基于Sven的回答,让我们说你需要测试一个类的集合,同时模拟出去数据库的位,或者调用外部服务,你会看到用SpringJUnit4ClassRunner运行测试。
如果您尝试将单个Java类作为一个单元进行测试,同时模拟集成位和本地协作者,那么使用MockitoJUnitRunner运行测试也足够快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM