首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于春季蒙古库单元测试的Mockito或Embedded Mongo

用于春季蒙古库单元测试的Mockito或Embedded Mongo
EN

Stack Overflow用户
提问于 2022-09-05 23:38:18
回答 1查看 94关注 0票数 1

嗨,我是春季蒙哥测试的新手。我知道,使用嵌入式db,如flapdoodle、fongo、mongo-java-server,我们可以对mongorepository进行单元测试。但同样的使用mockito是可能的吗?如果是,那哪个更好

EN

回答 1

Stack Overflow用户

发布于 2022-09-06 13:42:00

Mockito用于模拟对外部依赖项的调用。像flapdoodle这样的实用程序用于模拟外部依赖项(在本例中为MongoDB)。这只是两种不同的方法。

  1. 您可以模拟存储库类的方法来返回一些存根值,而不是调用数据库。请参阅下面的例子:
代码语言:javascript
复制
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");
    }
}
  1. 您可以模拟您的数据库(只需实例化其他一些测试嵌入式数据库),并在测试中对其进行实际调用。这就是flapdoodle派上用场的地方。在本例中,您将使用实际的存储库/服务/等等。请参见下面的示例:
代码语言:javascript
复制
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模块

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73615461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档