我有一个使用SpringBoot2和mongodb的应用程序,我试图通过进行如下测试来测试某些DTOS的json序列化:
@JsonTest
@RunWith(SpringRunner.class)
public class SomeDTOTest {
@Autowired
JacksonTester < SomeDTO > json;
@Test
public void someTest() {}
}
然而,在spring下面试图创建存储库bean并给我信息:
***************************
APPLICATION FAILED TO START
***************************
Description:
A component required a bean named 'mongoTemplate' that could not be found.
Action:
Consider defining a bean named 'mongoTemplate' in your configuration.
我有更多使用存储库的集成测试,并使用@SpringBootTests进行注释,它们工作正常......
有没有办法限制spring只创建JacksonTester bean?
答案 0 :(得分:1)
你可以在没有弹簧跑步者的情况下创建一个测试。
这是一个示例example test
当加载弹簧上下文时,如果某个地方有一个mongotemplate的自动连接注释,spring会尝试提供它。你可能会考虑:
在测试中提供了mongo模板
尝试使用 @DataMongoTest ,它将提供嵌入式数据库。
设置不需要自动装配
使用 @Autowired(required = false)
Mock mongotemplate
使用 @MockBean 注释来模拟mongoTemplate
答案 1 :(得分:1)
我发现在Spring Boot应用程序中同时进行集成测试和单元测试非常具有挑战性。 我检查了Spring网站并尝试了很多解决方案。对我有用的是排除AutoConfiguration类:
@RunWith(SpringRunner.class)
@JsonTest(excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class)
public class JsonTests {
@Autowired
private JacksonTester json;
@MockBean
private MyRepository repository;
@MockBean
private MongoTemplate mongoTemplate;
@Test
public void someTest() {}
}
您可以找到包含集成和单元测试here的完整Spring Boot应用程序。