我想将下面的代码移植到核心。但无论如何检查代码是否正在运行(例如:在kestrel上)或在测试中运行(例如:在NUnit上)
if (HostingEnvironment.IsHosted)
{
//hosted
return HostingEnvironment.MapPath(path);
}
//not hosted. For example, run in unit tests
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
path = path.Replace("~/", "").TrimStart('/').Replace('/', '\\');
return Path.Combine(baseDirectory, path);
我试着这样做 _hostingEnvirontment是IHostingEnvironment
if (I MUST CHECK IS HOSTED OR NOT)
{
//hosted
return _hostingEnvironment.ContentRootPath + path;
}
//not hosted. For example, run in unit tests
var baseDirectory = AppContext.BaseDirectory;
path = path.Replace("~/", "").TrimStart('/').Replace('/', '\\');
return Path.Combine(baseDirectory, path);
答案 0 :(得分:1)
不要让您正在测试的代码“知道”它是在现场运行还是在测试框架下运行,而是最好在测试环境中注入需要更改的内容。这使得您的应用程序通常更易于测试,并避免了让sut了解测试框架所固有的许多风险。
考虑创建一个实现IHostingEnvironment的TestHostingEnvironment,并在运行测试时将其提供给SUT。