java - 在 Spring 测试中模拟依赖项的自动装配依赖项
问题描述
我试图在我的测试中模拟依赖项的依赖项。下面是我的课程的样子。
class A {
@Autowired B b;
@Autowired C c;
public String doA() {
return b.doB() + c.doC();
}
}
class C {
@Autowired D d;
public String doC() {
return d.doD();
}
}
class D {
public String doD() {
return "Hello";
}
}
我试图在调用方法 doA() 时模拟 D 类中的方法 doD(); 但是,我不想模拟 B 类中的 doB() 方法。下面是我的测试用例。
@RunWith(SpringRunner.class)
@SpringBootTest(
classes = MyTestApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
)
public class ATest {
@Autowired
private A a;
@InjectMocks
@Spy
private C c;
@Mock
private D d;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void testDoA() {
doReturn("Ola")
.when(d)
.doD();
a.doA();
}
}
这仍然最终返回“Hello”而不是“Ola”。我在测试类中也尝试了A上的 @InjectMocks 。但这只会导致自动装配的 B 依赖项 B 为空。我的设置是否缺少某些东西,或者这是错误的方法?
谢谢你。
解决方案
使用它会在执行测试方法docs@MockBean
之前将模拟 bean 注入到应用程序上下文中。
可用于将模拟添加到 Spring ApplicationContext 的注释。可以用作类级别注释或@Configuration 类中的字段,或@RunWith SpringRunner 的测试类。
@RunWith(SpringRunner.class)
@SpringBootTest(
classes = MyTestApplication.class,
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ATest {
@Autowired
private A a;
@MockBean
private D d;
@Test
public void testDoA() {
doReturn("Ola")
.when(d)
.doD();
a.doA();
}
}
推荐阅读
- facebook-graph-api - 如何避免在 facebook 微数据调试器工具中出现“产品缺少字段:google_product_category”警告?
- r - 通过VBA执行时忽略R脚本
- mod-auth-openidc - 如何正确使用 OIDCUnAuthAction 传入 mod_auth_openidc?
- mysql - 有没有办法只显示满足一组特定条款的组?
- firebase - 如何测量 Stackdriver 上的 Firestore 读取和写入计数
- gerrit - 如何在gerrit的评论中提及某人?
- scenekit - SceneKit 在调用 didApplyConstraints 和 willRenderScene 之间做了什么?
- mongodb - 我如何只显示 MongoDB 聚合的前 1000 个结果
- google-sheets - 解决 DGET 函数“找到多个匹配项”错误
- c++ - 无法在 unordered_set 中找到()结构属性