【发布时间】:2021-12-09 11:06:39
【问题描述】:
当我正在测试的函数使用 Directory.GetCurrentDirectory() 时,我再次收到以下错误:System.IO.DirectoryNotFoundException
我想知道是否存在模拟方法或更改 Directory.GetCurrentDirectory() 返回的方法。我愿意接受建议..
我无法发布完整的代码,但它是这样的:
[Fact]
public async Task someMethod()
{
// Arrange
var userData = new userData
{
Email = "test@test.com"
};
_someRepository.Setup(x => x.GetSomething(It.IsAny<string>())).ReturnsAsync(Faker());
var service= new Service();
// Act
var result = await service.TestedMethod(userData);
// Assert
Assert.False(result.Success);
}
public class Service
{
public async Task<ReponseViewModel> TestedMethod(userData vm)
{
var anything = await _someRepository.GetSomething(vm.Email);
var template = GetTemplate(url);
return something;
}
private string GetTemplate(string url)
{
var template = File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"wwwroot",
"html",
"myfile.html"));
return template;
}
}
【问题讨论】:
-
抽象出与 System.IO 的紧密耦合
-
可能,单元测试运行程序是从与您预期不同的目录执行的。这就是
Directory.GetCurrentDirectory()方法返回错误路径的原因。您可以尝试调试单元测试来验证这一点 -
您确定异常来自
Directory.GetCurrentDirectory()而不是File.ReadAllText()?
标签: c# .net unit-testing moq xunit