我遇到了NCrunch的问题,当我测试一个试图访问文件系统的方法时,我遇到以下异常。
System.IO.DirectoryNotFoundException
Could not find a part of the path 'C:\Users\shawn\AppData\Local\NCrunch\23344\21\EmailAPI.Tests\bin\Debug\netcoreapp2.0\Emails\Templates\BaseEmail.html'
这是EmailAPI项目中的代码,我尝试测试的方法是调用获取html文件的内容。此代码可以正常运行api,但是当单元测试到达此处时,会抛出该异常。
public void SendEmail(){
var template = System.IO.File.ReadAllText("Emails/Templates/BaseEmail.html")
}
EmailAPI项目结构:
-EmailAPI Project Root
-Emails
-Strategies
-BaseEmailStrategy <--- Class and method under test
-Templates
-BaseEmail.html <--- File read from ReadAllText
-EmailAPI.Tests Project Root
-Emails
-Strategies
-BaseEmailStrategyTests <-- Test class
所以在正在测试的项目中,当我执行上面的代码时,应用程序似乎知道我从项目的根目录引用了这个文件。当单元测试项目在调用方法时运行代码时,它似乎试图从NCrunch构建输出bin文件夹中找到文件路径。有谁知道我怎么能让这个工作?
我已经对使用IHostingEnvironment并将ContentRoot设置为EmailAPI项目的根目录进行了一些研究,但我不知道如何获取相对于我的EmailAPI.Tests项目的目录路径。我还研究了使用System.IO.Abstractions模拟文件系统,但我试图避免将文件系统接口传递给构造函数(因为我使用的策略模式使它有点乱,我想避免代码更改严格用于测试目的。)尽管找到一个不错的解决方案,但目前还没有运气。