【发布时间】:2022-01-20 05:05:11
【问题描述】:
我有一个服务 A。A 使用存储库 R 和服务 B。B 执行 REST 调用。 R 和 B 通过 A 的构造函数(推荐)注入。我现在想测试一个方法,其中 R 和 B 都被调用。但我只想模拟 B,因为测试数据库充满了很多测试数据,我想使用它。到目前为止,我无法用 Mockito 实现这种正确的注射。这是我的代码:
@Service class A {
private final R repo;
private final B service;
@Autowired
public A(R repo, B service) {
this.repo = repo;
this.service = service;
}
public int foo() {
repo.doSomeStuff();
service.doSomeStuff();
...
}
}
@SpringBootTest
@ExtendWith(MockitoExtension.class)
class ATest {
@Autowired A service;
@Mock B mockedService;
@BeforeEach
void setupMocks() {
MockitoAnnotations.openMocks(this);
}
@Test
void testFoo() {
service.foo();
...
}
}
我已经尝试过在 ATest.service 上使用 @InjectMocks 的不同变体,也忽略了 @Autowired。到目前为止没有任何效果。甚至可能吗?我可能需要在 A 中使用 setter 注入吗?
【问题讨论】:
-
删除
@BeforeEach,删除@ExtendsWith。将@Mock替换为@MockBean。运行测试。
标签: java spring-boot mocking mockito