代码之家  ›  专栏  ›  技术社区  ›  JMarsch

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

  •  5
  • JMarsch  · 技术社区  · 15 年前

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

    我的问题是,该文件需要通过单元测试来发现。但是,当测试运行时,它从测试结果文件夹下的临时“输出”目录运行。它找不到我的输入文件。

    我已经将该文件添加到单元测试项目中,编译操作为“none”,复制到输出目录选项为“copy if newer”,但复制发生在普通VS output目录(在bin下),而不是单元测试执行目录,因此找不到该文件。我不想硬编码文件的路径,因为测试应该为任何签出单元测试的人运行。我可以将输入文件放在解决方案文件夹中,让测试代码通过硬编码树上的相对路径来“发现”文件,但我认为这是一个常见问题,因此我想检查是否遗漏了一些内容。

    3 回复  |  直到 15 年前
        1
  •  5
  •   Todd Stout    15 年前

    将该文件作为资源添加到测试程序集中。然后,您可以在运行时通过测试设置中的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();
            }
        }
    }
    

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

        2
  •  5
  •   Ade Miller    15 年前

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

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

    或者,您可以将该文件添加为资源并从中读取。那是我通常做的事。

        3
  •  3
  •   Matthew Vines    15 年前