我有一些存储库课,这些课程旨在与不同类型的数据进行交谈,从 IRepository 界面。

在实现中,代码与数据源进行了对话,是XML文件或数据库的目录,甚至只是缓存。是否可以可靠地测试这些实现中的任何一个?我看不到模拟实现工作,因为那时我只在测试模拟代码而不是实际代码。

有帮助吗?

解决方案

不,当您写一堂课时,您会使用模拟 用途 一个 IRepository. 。为了 实施IRepository, ,您需要针对适当的数据源进行测试。对于数据库,这有点痛苦 - 对于文件系统,稍微少一些。

在可能的情况下,如果您可以用流或读者来表达实施方式,那么您将使您的生活更轻松:实现这些部分的测试可能与内存数据源或来自测试组件中资源的流有关。当然您可能需要 一些 转到真实数据库或文件系统的测试,但希望更少。

无论您是否称此类测试为“单位”测试是您定义单元测试的方法;我个人不太在乎所涉及的名字,但是我 关心测试。特别是对于数据库,这些可能会有些痛苦(尤其是如果您想并行进行测试) - 但根据我的经验,它们也可能非常有价值。

其他提示

我认为,如果您正在测试实际持续或查询数据的代码,那么您实际上可能想点击数据库。

这些是集成测试,而不是单位测试。

您可以设置一个测试数据库,其中了解数据的状态,并针对此数据进行测试。您可能还想告诉测试它们与您的单位测试不同,并且不需要在每次检查时运行(在Nunit中,您可以使用属性来装饰测试课程,告诉它不要运行)

从广义上讲,你不会 单元 测试任何唯一目的的代码是与数据源交谈。您可能仍然需要自动测试存储库,但是根据定义,该测试将是集成测试。您可能不想在“第一次通过”构建的一部分中运行这些测试,例如设置数据库并在您自己之后进行清理可能会花费不大的时间。

如果您的存储库有其他职责(例如实施工作模式单位),则您可能需要单独测试它们。

在实现IREpository的某个时候,您将使用第三方API,该API实际上将读/写入/从数据库/文件/XML。您要做的是嘲笑这些API,以确保您的代码按正确顺序调用正确的API。

因此,如果您正在从数据库中读取,则可以模拟SQLConnection和SQLCommand,并确保在这些类上调用正确的方法。如果您要写入流,则可以模拟流并确保将其冲洗并将其处理(例如)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top