c# - 单元测试开始后出现 FileNotFoundException。尝试在 AppData 下搜索

标签 c# unit-testing

[SetUp]部分,其中加载一些文件以供以后测试。

它应该加载:

private string GiveFilePath()
{
   string folder;
   string assemblyPath;

   assemblyPath = Assembly.GetExecutingAssembly().Location;
   folder = new FileInfo(assemblyPath ).DirectoryName;
   return folder + @"\" + FileNameAsConst;
}

但我明白了

System.IO.FileNotFoundException 位于 C:\Users\username\AppData\Local\Temp\...

因为它尝试从 AppData 而不是从项目文件夹加载此文件。

有类似的question已经问过了。问题的作者发现自己的答案是将 ShadowCopyFiles 属性设置为 true

但是代码或配置文件中没有任何 ShadowCopyFiles

你有什么想法吗?

更新:

[SetUp]
public void SetUp()
{       
    this.facade = new MyFacade();
}

[Test]
public void InstanceIsNotNull()
{
   Assert.IsNotNull(facade);
}

...

public MyFacade()
{
   FileStream fileStrem = new FileStream(GiveFilePath(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
   ...
}

最佳答案

您应该了解测试运行的上下文以及您提供的代码的上下文,无论执行的程序集是实际测试还是要加载到单独(或相同)AppDomain 中的外部程序集等。

大多数时候,如果您没有做任何特殊的事情,并且您尝试加载的文件位于与执行程序集。您可以轻松地使用 System.IO 命名空间中的类来管理此文件,这比任何反射操作都便宜。您甚至不需要指定整个绝对路径,相对路径就足够了。如果该文件包含在您的项目中,请确保将“复制到输出目录”设置为“始终复制”,并确保“构建操作”设置为“内容”,然后在运行时,首先确保文件存在...

if(File.Exists("filename.ext"))

请注意,路径是相对的,然后对文件执行任何您想要的操作...

File.ReadAllText("filename.ext");
File.Delete("filename.ext");

关于c# - 单元测试开始后出现 FileNotFoundException。尝试在 AppData 下搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153478/

相关文章:

javascript - 检查单元测试中是否调用了函数

php - 如何重置对 PHPUnit 模拟对象的期望

c# - C#中如何判断组合框中的项目是否被选中?

c# - 如何在选定的打印机中打印任何文档

c# - 有没有办法缩短这么长的 if/else if return 方法?

c# - 为什么 CTRL-D 不以单声道发送 EOF?

java - 如何模拟单例工厂的对象创建?

java - 静态成员值将被带入下一次测试

c# - 在 Akka.NET 中测试 self 消息发送

c# - 通过 C# .net 窗口应用程序打印账单