TDD:进行集成测试是否合理,但没有单元测试?

Nor*_*ren 5 .net c# nunit unit-testing

技术堆栈:.NET 4,C#,NUnit

我正在尝试将测试驱动开发应用于执行图像处理的新项目.我有一个基类,包含共享文件I/O方法和子类,执行各种特定的处理算法.据我了解,单元测试不会触及文件系统或其他对象,并模拟发生的行为.我的基类只包含简单的访问器和简单的文件系统I/O调用.

public class BaseFile
{
    public String Path { get; set; }

    public BaseFile()
    {
        Path = String.Empty;
    }

    public BaseFile(String path)
    {
        if (!File.Exists(path))
        {
            throw new FileNotFoundException("File not found.", path);
        }

        Path = path;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试这些方法有什么价值吗?如果是这样,我怎样才能抽象出对文件系统的调用?

我的另一个问题是如何测试特定于一种图像文件(~200 MB)的子类.我搜索了网站并发现了类似的 问题,但没有处理我正在使用的文件大小.一个类是否有可能进行集成测试(使用"黄金文件"),但没有单元测试?在这种情况下,我怎样才能严格遵循TDD方法并首先编写失败的测试?

Myl*_*ell 4

在回答你的第一个问题时,是的,测试这些方法是有价值的。我已经发布了一个库,可以帮助您准确地做到这一点,而无需实际访问文件系统:https://bitbucket.org/mylesmcdonnell/mpm.io/wiki/Home

在(不是)回答你的第二个问题时,我需要查看一些代码,但我怀疑你可能需要对上述库采取类似的方法。即;定义接口,定义具体的代理,定义工厂以返回代理或模拟。