java - 使用 Spring JavaConfig 和 @Autowired 注入(inject

我正在尝试用 Mockito 模拟对象替换 @Autowired 对象。通常的做法是使用 Springockito 使用 xml:

<mockito:mock id="SomeMock" class="com.package.MockInterface" />

目前我正在尝试转而使用 Spring 的 JavaConfig 来完成这项工作。突然之间,Java 表达式比 xml 更加冗长:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class MyTestClass {

    @Configuration
    static class Config {
        @Bean
        public MockInterface somethingSpecial() {
            return Mockito.mock(MockInterface.class);
        }
    }

    @Autowired MockInterface mockObj;

    // test code
}

我发现了一个名为 Springockito-annotations 的库,它允许您执行以下操作:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader=SpringockitoContextLoader.class)
public class MyTestClass {

    @Autowired @ReplaceWithMock MockInterface mockObj;

    // test code
}

很明显,漂亮多了:) 唯一的问题是这个上下文加载器不允许我为其他 bean 使用 @Configuration 和 JavaConfig(如果我这样做了,Spring 提示说有没有与这些 Autowiring 字段匹配的候选人)。

你们知道让 Spring 的 JavaConfig 和 Springockito-annotations 发挥良好作用的方法吗?或者,是否有另一种创建模拟的简写?

作为一个不错的奖励,使用 Springockito 和 xml 配置,我能够模拟出具体的类,而无需为其依赖项提供 Autowiring 候选者(如果有的话)。没有xml,这不可能吗?

最佳答案

从现在未维护(在撰写本文时)的 Spingockito 注释转移到 Mockito,我们有一种非常简单的方法:

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration
public class MyTestClass {

    @Mock MockInterface mockObj;

    // test code
}

如果您使用的是真实对象,但想模拟其中的依赖项,例如使用 DAO 测试服务层:

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration
public class MyTestClass {

    @InjectMocks RealService;

    @Mock MockDAO mockDAO;

    // test code
}

最后,这也可以应用于 Spring-boot,但在 setUp() 中使用注解初始化,直到支持多个类运行器:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyMainSpringBootClass.class)
public class MyTestClass {

    @InjectMocks RealService;

    @Mock MockDAO mockDAO;

    @Before
    public final void setUp() throws Exception{
        MockitoAnnotations.initMocks(this);
    }

    // test code
}

关于java - 使用 Spring JavaConfig 和 @Autowired 注入(inject) Mockito Mock 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14896007/

相关文章:

spring - Spring 和 Java EE 中的 @PersistenceContext E

spring - java 9模块从A和B读取包X

java - STS Spring 与 Roo 和 Maven - 太慢了?

java - Spring MVC : Resolving the view based on Us

java - 如何使用spring websocket向自定义用户发送自定义消息?

spring - Spring Boot 2 中的 EmbeddedServletContainer

java - spring mvc 表单 :select tag

spring - 如何在 apache 基准测试工具中限制每秒请求

java - 如何将 bean 注入(inject)作用域实现?

spring - java.lang.ClassNotFoundException : org. a