使用内存数据库进行测试。 单元测试还是集成测试?

10

单元测试集成测试的概念很清晰:前者测试一个组件,后者测试多个组件。

我使用Effort来测试我的Entity Framework存储库。Effort是一种内存数据库实现,因此我们不会接触到实际的数据库,而只是在内存中运行,所以速度更快。

我仅通过创建一些虚假数据并将其填充到内存数据库中来测试我的存储库。我没有mock数据上下文。这些应该被视为单元测试还是集成测试?

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

2个回答

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

如果你的方法只是使用db Connection对象从内存db中检索行而不是真正的db,并且没有调用其他公共服务或被模拟调用(如果有调用),那么你正在进行单元测试(即使你没有分享CustomerRepository.GetAllCustomers代码的情况下,这似乎是我的想法)。

正如之前的答案所指出的那样,仅仅使用内存db是不足以判断你的测试是单元测试还是集成测试,尤其是如果你正在测试DAO层本身。


谢谢Sabir,你说得对。我没有使用任何其他服务(我模拟了所有依赖项),并且我正在使用内存数据库。自从我问了这个问题以来,我了解到单元测试的要求之一是它们在内存中执行而不是访问实际数据库。谢谢! - user11081980

0

仅使用内存数据库并不足以确定您正在编写单元测试还是集成测试。

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


谢谢你的留言。我添加了更多关于我正在做的事情的细节。谢谢! - user11081980
你能否添加GetAllCustomers的示例代码或伪代码,以便了解您如何处理依赖项?例如:客户工厂、数据库连接等。 - fips

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接