如何为使用MongoRepository的Spring Boot控制器编写单元测试?

时间:2018-09-26 13:49:47

标签: spring-boot junit4 spring-data-mongodb

我设法为不需要任何其他服务或API的基本控制器编写了一个测试。但是现在我正努力将其应用于与数据库交互的控制器。 我从SO或Google向我投掷的其他网站上提供的不同来源收集了示例。尽管我使用的是最新的2.0.4.RELEASE

,但大多数都非常老,并且基于spring-boot 1.3或1.5。

一些有用的摘录(我将其详细的内容与您无关,为您保留)

@RunWith(SpringRunner.class)
@WebMvcTest(HtmlController.class)
public class HtmlControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testIndex() {
        try {
            mockMvc.perform(get("/"));//etc.
        } catch (Exception e) {
            fail();
        }
    }
}

我更复杂的控制器@Autorwires此接口:

public interface SetRepository extends MongoRepository<SetEntity, String>

Here我发现我可以将@DataMongoTest添加到测试类中,并将fladoodle的依赖项添加到pom中,它应该可以工作:

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <scope>test</scope>
</dependency> 

但是我立即得到InitializationError,而没有任何关于出了什么问题的信息。我发现可能需要在spring.data.mongodb.port=0上添加application.properties,但这并没有改变。

我想念什么?有没有人有使用MongoRepository接口的示例测试?

1 个答案:

答案 0 :(得分:0)

这里有一个例子。

@DataMongoTest
@ExtendWith(SpringExtension.class)
public class MongoDbIntegrationTest {

 @Autowired
 private MongoTemplate mongoTemplate

    @Test
    public void test() {

   //Create your document object
        DBObject objectToSave = new DBObject();
        objectToSave.set /// set properties..
        mongoTemplate.save(objectToSave, "collection");

        // then assert result..
        assertThat(mongoTemplate.findAll(DBObject.class, "collection")).extracting("key")
            .containsOnly("value");
    }
}