Son*_*nka 4 java spring unit-testing spring-boot
在我工作的一个项目中,我们一直通过以下方式初始化单元测试服务:
像这样的东西:
@RunWith(SpringRunner.class)
public class ServiceTest extends AbstractUnitTest {
@Mock private Repository repository;
private Service service;
@Before
public void init() {
service = new Service(repository);
when(repository.findById(any(Long.class))).thenReturn(Optional.of(new Entity()));
}
}
Run Code Online (Sandbox Code Playgroud)
但我们的新开发人员建议使用@Autowired和@SpringBootTest
@SpringBootTest(classes = ServiceTest.class)
@MockBean(classes = Repository.class)
@RunWith(SpringRunner.class)
public class ServiceTest extends AbstractUnitTest {
@MockBean private Repository repository;
@Autowired private Service service;
@Before
public void init() {
when(repository.findById(any(Long.class))).thenReturn(Optional.of(new Entity()));
}
}
Run Code Online (Sandbox Code Playgroud)
在此之前,我认为@Autowiredand@SpringBootTest应该仅在集成测试中使用。但谷歌搜索了很多,我发现有些人在单元测试中使用这两个。我读了boot-features-testing。另外,我阅读了单元测试与 Spring 集成测试。对我来说,我们仍然感觉不太好,因为我们可以自己做单元测试,所以需要让 Spring 来进行单元测试的依赖注入。那么,应该 在单元测试中使用@Autowired和 吗?@SpringBootTest
不。单元测试是单独测试单个组件。在 bean 中使用构造函数注入可以让您非常简单地调用new SomeService(myMock),不需要 Spring。
编写组件或功能测试(测试您的应用程序,但不将其连接到外部服务以进行完整的集成测试,仅模拟外部接口;这对于 MockMvc 测试之类的事情很有用)非常适合@SpringBootTest,在这种情况下您可能需要在 Spring 配置中创建模拟对象并将它们自动连接到您的测试中,以便您可以操作它们。
| 归档时间: |
|
| 查看次数: |
2488 次 |
| 最近记录: |