c# - 需要使用系统库对服务进行单元测试

标签 c# unit-testing tdd

我目前正在测试我正在编写的“PluginsService”。我需要使用 Assembly、AssemblyName、Directory 和 File 的系统库。目前我正在为其中的每一个创建包装器接口(interface),以便我可以在测试中模拟它们。然而,这确实意味着我必须向服务中注入(inject)相当多的包装器。

因此,例如,当测试一种在文件夹中搜索某些插件的方法时,我正在这样做

With.Mocks(mockery)
    .Expecting(() =>
    {
            Expect.Call(directory.GetFiles(PLUGINPATH, PLUGINSEARCHPATTERN)).IgnoreArguments().Return(pluginLibraries);
            Expect.Call(file.ReadAllBytes(null)).IgnoreArguments().Return(bytes);
               Expect.Call(assemblyName.GetAssemblyName("fileName")).IgnoreArguments().Return(name);
            Expect.Call(assembly.GetExecutingAssembly()).Return(executingAssembly);
    })
    .Verify(() => result = service.FindAvailablePlugins());

我有两个问题:

  1. 有没有更好的方法来处理 TDD 的系统库项目?
  2. 将 4 个项目注入(inject)一个类(class)是否太多?

最佳答案

我最近做了同样的事情并想出了一个设计,我有自己的 Directory 对象,它有一个 DirectoryBoundary 是到目录的链接。 DirectoryBoundary 本身并未直接进行单元测试,但我使用了一些集成测试来覆盖它。

如果你朝着这个方向前进,我想你会发现你的设计变得更加流畅,你的集成点也更加容易。让我们面对现实吧,.NET 文件 IO 类并不是为可测试性而设计的。所以想出你自己的。您可以模拟新的 Directory 类,或者像我所做的那样,只使用伪造的边界类和您注入(inject)的某种形式的创建者。

希望对您有所帮助。

关于c# - 需要使用系统库对服务进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/767591/

相关文章:

node.js - mocha 异步测试超时

entity-framework - System.InvalidOperationException:特定于关系的方法只能在上下文使用关系数据库提供程序时使用

assembly - 是否有任何组装测试框架?

oop - 为什么类 Money 通过示例扩展 Kent Beck 的 TDD 中的表达式?

python - "Zero Iteration"- 简单联系表功能中的端到端验收测试

c# - 如何重试直到满足某些条件

c# - 同时运行两个代码c#

java - JUnit 测试既通过又失败 - 使用 ExpectedException 和 TestWatcher @Rule's 发生冲突

c# - 从托管或生成进程调用非托管代码

c# - 改变边界后矩形的矩阵变换