Spring Boot尝试使用@JsonTest注释在测试中创建mongo存储库

时间:2018-03-21 12:54:14

标签: java json spring spring-boot junit

我有一个使用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?

2 个答案:

答案 0 :(得分:1)

你可以在没有弹簧跑步者的情况下创建一个测试。

这是一个示例example test

当加载弹簧上下文时,如果某个地方有一个mongotemplate的自动连接注释,spring会尝试提供它。你可能会考虑:

  1. 在测试中提供了mongo模板

    尝试使用 @DataMongoTest ,它将提供嵌入式数据库。

  2. 设置不需要自动装配

    使用 @Autowired(required = false)

  3. 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应用程序。