有[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);
...
}
答案 0 :(得分:1)
您应该了解正在运行测试的上下文以及您提供的代码的上下文,无论执行程序集是实际测试还是您要加载到单独(或相同)AppDomain中的外部程序集等。
大多数情况下,如果你没有做任何特别的事情,如果你要加载的文件与执行程序集位于同一个地方,你就不需要对Assembly.GetExecutingAssembly
进行反射调用。您可以轻松使用System.IO
命名空间中的类来管理此文件,该文件比任何反射操作都便宜。您甚至不需要指定整个绝对路径,相对路径就足够了。如果文件包含在项目中,请确保将“复制到输出目录”设置为“始终复制”,并确保将“构建操作”设置为“内容”,然后在运行时首先确保文件存在......
if(File.Exists("filename.ext"))
注意路径是相对的,然后对文件执行任何操作...
File.ReadAllText("filename.ext");
File.Delete("filename.ext");
答案 1 :(得分:1)
我强烈怀疑在进入unittest之前装配位置发生了一些事情,这就是为什么我建议你使用不同的unittest设置。
尝试遵循AAA模式:
安排:设置运行测试代码所需的一切。这包括测试运行所需的依赖项,模拟和数据的任何初始化 行动:调用测试中的代码 断言:指定测试的通过条件,如果不符合则会失败。
您的unittest肯定会澄清以下内容:
从您提供的代码中,不知道其他测试是否可能干扰了所使用的数据。不同的文化或其他改变很可能alter the setup of facade
。
我建议您将unittest更改为AAA模式并隔离问题。因此,将设置更改为unittest内部,以消除从其他位置进行的任何更改。
单独运行此单元测试,无需运行任何其他操作。我已经看到单位测试失败了,因为在运行我关注的单元测试之前,文化已在一个单元测试中被更改(并且由于这种文化变化而失败)。
如果在隔离单元测试后问题仍然存在;提供可重现的代码,为您提供此问题。