我在使用 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 模拟文件系统,但我试图避免将文件系统接口传递给构造函数(因为我使用的策略模式使它有点混乱,我想避免代码更改严格用于测试目的。)虽然找到了一个不错的解决方案,但到目前为止还没有运气。