【问题标题】:Testing with an in-memory database. Unit test or integration test?使用内存数据库进行测试。单元测试还是集成测试?
【发布时间】:2016-06-24 18:48:58
【问题描述】:

unit testintegration test 的概念定义明确:前者测试一个组件,后者测试多个组件。

我使用Effort 来测试我的Entity Framework 存储库。 Effort 是一种内存数据库实现,因此我们不会使用实际的数据库,而只是使用内存,因此速度更快。

我只是通过创建一些假数据并用这些假数据填充内存数据库来测试我的存储库。我不是在嘲笑数据上下文。这些应该被视为单元测试还是集成测试?

编辑:我正在测试我的存储库的方法 - 例如CustomerRepository.GetAllCustomers。我正在用(比如说)5 个客户填充这个内存数据库,调用该方法,并断言我让这 5 个客户回来了。

【问题讨论】:

    标签: unit-testing


    【解决方案1】:

    根据您对方法 CustomerRepository.GetAllCustomers 的测试的描述,它看起来确实是一个单元测试,因为您没有使用其他服务(外部或应用内)

    如果您的方法只是使用 db Connectionobject 从内存 db 而不是真实 db 中检索行,并且没有调用或模拟其他公共服务(如果调用),那么您正在执行单元测试(其中即使您没有共享 CustomerRepository.GetAllCustomers 的代码,对我来说确实如此。

    正如前面的答案已经指出的那样,仅使用内存数据库不足以判断您的测试是单元测试还是集成测试。如果您正在测试 DAO layer 本身。

    【讨论】:

    • 谢谢萨比尔,你是对的。我没有使用任何其他服务(我正在模拟所有依赖项)并且我使用的是内存数据库。自从我问了这个问题后,我了解到单元测试的要求之一是它们在内存中执行,而不是访问实际的数据库。谢谢!
    【解决方案2】:

    使用内存数据库不足以判断您是在编写单元测试还是集成测试。

    如果你只是测试一个小组件,比如类的方法,那么是的,它是一个单元测试。但是,如果该方法调用其他公共方法来完成它的工作并且您不模拟这些依赖项,那么这将是一个集成测试。

    【讨论】:

    • 感谢您的留言。我添加了更多关于我在做什么的细节。谢谢!
    • 您能否为GetAllCustomers 添加示例代码或伪代码以了解您如何处理依赖关系?例如。客户工厂、数据库连接等
    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2021-12-19
    • 2014-09-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多