使用输入文件进行单元测试

JMa*_*sch 5 unit-testing visual-studio

全部:我有一个单元测试,它正在测试需要输入文件的功能.此测试是使用VS 2008的内置单元测试功能构建的.

我的问题是单元测试需要发现文件.但是,当测试运行时,它将从测试结果文件夹下的临时"输出"目录运行.它无法找到我的输入文件.

我已将文件添加到单元测试项目中,编译操作为"none",复制到输出目录选项为"copy if newer",但副本发生在正常VS输出目录(在bin下),并且不到单元测试执行目录,因此找不到该文件.我不想硬编码文件的路径,因为测试应该为任何检查单元测试的人运行.我可以将输入文件放在一个解决方案文件夹中,让测试代码通过硬编码一个相对路径备份树来"发现"该文件,但我认为这必须是一个常见的问题,所以我想检查一下失踪了什么.

Tod*_*out 5

将该文件作为资源添加到您的测试程序集。然后,您可以在运行时通过测试设置中的 Assembly.GetManifestResourceStream 加载它。

这是我用来加载资源的便捷方法:

public static class ResLoader
{        
    public static string AsString<T>(string resName)
    {
         using (var reader = new StreamReader(Assembly.GetAssembly(typeof(T))
                                .GetManifestResourceStream(resName)))
        {
            return reader.ReadToEnd();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

T 是包含在测试程序集中的任何类。


Ade*_*ler 5

您可以使用DeploymentItem属性执行此操作.有很多与之相关的警告:

http://www.ademiller.com/blogs/tech/2007/10/gotchas-mstests-deploymentitem-attribute/

或者,您可以将文件添加为资源并从那里读取.这就是我通常做的事情.