【问题标题】:NUnit test not reading project fileNUnit 测试不读取项目文件
【发布时间】:2014-03-04 22:43:10
【问题描述】:

我想对一些解压代码进行单元测试。我将测试文件放入项目中以在测试中使用。我可以在控制台应用程序中运行代码,它运行良好,但是当我运行测试时它们失败了。

测试:

public void CsvStreamsToCsvStream()
    {
      string dir = System.IO.Path.GetDirectoryName(
      System.Reflection.Assembly.GetExecutingAssembly().Location);

      string file = Path.Combine(dir, @"\TestFiles\Test.csv");
      using (FileStream fstrm = new FileStream(file, FileMode.Open))
      {
        var decompressor = 
          new MemoryDecompresser(fstrm, Path.GetFileName(file));
        var results = decompressor.GetStreams();
        Assert.AreEqual(1, results.Count());
        Assert.AreEqual(results.First().Key, "Test.csv");

      }
    }

控制台应用:

namespace TestConsoleApp
{
  class Program
  {
    static void Main(string[] args)
    {
      var test = new TestDecompression();
      test.CsvStreamsToCsvStream();
    }
  }
}

项目:

测试资源管理器:

【问题讨论】:

  • 如果这是一个愚蠢的建议,请忽略它,但可能是因为测试位于子文件夹中吗?
  • 感谢@Ben 的建议,我认为更多的是 nUnit 正在寻找我的文件的 C 根目录而不是程序集路径
  • 您的执行程序集是测试运行器。因此,您使用 GetExecutingAssembly() 检索的位置与您的控制台应用程序中的位置不同。请改用System.Reflection.Assembly.GetAssembly(typeof(TestDecompression)).Location

标签: c# reflection nunit assemblies


【解决方案1】:

嵌入资源

使用程序集名称访问资源瓶“GetManifestResourceStream(string)”。文件夹名称。文件名

[Test]
    public void CsvStreamsToCsvStream()
    {
      using(Stream fstrm = 
                Assembly.GetExecutingAssembly()
                .GetManifestResourceStream(@"Tests.TestFiles.Test.csv"))
      {
        var decompressor =
          new MemoryDecompresser(fstrm, "Test.csv");
        var results = decompressor.GetStreams();
        Assert.AreEqual(1, results.Count());
        Assert.AreEqual(results.First().Key, "Test.csv");

      }
    }

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多