[英]Mockito or Embedded Mongo for unit testing spring mongorepository
嗨,我是 Spring Mongo 测试的新手。 我知道使用像 flapdoodle、fongo、mongo-java-server 这样的嵌入式数据库,我们可以对 mongorepository 进行单元测试。 但是使用 mockito 是否也可以做到这一点? 如果是,那么哪个更好
Mockito
用于对外部依赖项的 mocking 调用。 像flapdoodle
这样的实用程序用于模拟外部依赖项(在本例中为 MongoDB)。 这只是两种不同的方法。
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import static org.mockito.Mockito.doReturn;
class FooRepositoryTest {
@Mock
private FooRepository repository;
@Test
void testGetById() {
doReturn(new Object()).when(repository).findById("id");
Object object = repository.getById("id");
}
}
flapdoodle
派上用场的地方。 在这种情况下,您将使用实际的存储库/服务/等。 请看下面我的例子:import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@DataMongoTest
@ExtendWith(SpringExtension.class)
class FooMongoRepositoryTest {
@Autowired
private FooRepository repository;
@Test
void testGetById() {
Object object = repository.getById("id");
}
}
但是第二种情况不会是真正的单元测试,因为它将使用外部依赖项。 同时,它也不是真正的集成测试,因为您的真实应用程序使用的是真正的 Mongo 数据库,而不是一些flapdoodle
依赖项。
回答你关于什么更好的问题。 这取决于具体情况。 使用这些选项中的任何一个都是完全可以接受的。 使用两者甚至是有意义的,因为它只是两种不同类型的开发人员测试。
您还可以考虑什么:
有一个名为testcontainers的不错的库,它允许您在 Docker 容器中运行真实的数据库和其他服务。 它甚至有一个单独的预配置MongoDB 模块
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.