嗨,我是春季蒙哥测试的新手。我知道,使用嵌入式db,如flapdoodle、fongo、mongo-java-server,我们可以对mongorepository进行单元测试。但同样的使用mockito是可能的吗?如果是,那哪个更好
发布于 2022-09-06 13:42:00
Mockito用于模拟对外部依赖项的调用。像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依赖项。
回答你关于什么更好的问题。这要视具体情况而定。使用这两个选项都是完全可以接受的。使用这两种测试甚至是有意义的,因为这只是两种不同类型的开发人员测试。
您还可以考虑什么:
有一个很好的库名为测试容器,它允许您在Docker容器中运行真正的数据库和其他服务。它甚至有一个单独的预先配置的MongoDB模块。
https://stackoverflow.com/questions/73615461
复制相似问题