gpt4 book ai didi

java - 使用 Spring JavaConfig 和 @Autowired 注入(inject) Mockito Mock 对象

转载 作者:IT老高 更新时间:2023-10-28 13:44:06 25 4
gpt4 key购买 nike

我正在尝试用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com