【问题标题】:Unit testing with an input file使用输入文件进行单元测试
【发布时间】:2009-10-14 16:58:33
【问题描述】:

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

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

我已将文件添加到单元测试项目中,编译操作为“none”,并复制到输出目录选项“如果较新则复制”,但复制到正常的 VS 输出目录(在 bin ),而不是到单元测试执行目录,所以找不到文件。我不想硬编码文件的路径,因为测试应该为签出单元测试的任何人运行。我可以将输入文件放在解决方案文件夹中,并通过硬编码备份树的相对路径让测试代码“发现”该文件,但我认为这一定是一个常见问题,所以我想检查我是否错过了什么。

【问题讨论】:

    标签: visual-studio unit-testing


    【解决方案1】:

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

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

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

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

      【讨论】:

        【解决方案3】:

        我通常模拟文件和数据库结果等外部资源,而不是尝试在我的单元测试中访问它们。这并不总是容易做到的。也许如果您向我们展示有问题的方法,我们可以帮助您使其更易于单元测试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-19
          • 2010-09-15
          • 2019-05-21
          • 2020-02-29
          • 2019-05-10
          • 2011-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多