目前,我从位于单元测试项目文件的子目录中的配置文件加载配置:
HostingEnvironment env = new HostingEnvironment();
env.Initialize(@"C:\ProjectRoot\tests\MyProject.Tests", "UnitTesting");
Startup startup = new Startup(env);
var cfg = startup.Configuration;
var cs = cfg.Get("ConnectionStrings:MyApp");
Assert.NotNull(cs);
这看起来很难看,因为它使用了绝对路径C:\ProjectRoot\tests\MyProject.Tests
,这可能会因其他开发人员而异。
有没有办法用相对路径替换它?
答案 0 :(得分:0)
Directory.GetCurrentDirectory()
适用于命令行和visual studio xunit测试运行器^ _ ^。
答案 1 :(得分:0)
Directory.GetCurrentDirectory
不起作用,因为它返回C:\\xxxxx\\xxxx\\xxxx\\bin\\Debug\\net451\\win7-x64
的内容。这里不会有任何配置json文件!
答案 2 :(得分:0)
您可以在项目的构建输出中包含配置文件,方法是在这些行中添加一些内容到project.json
:
"buildOptions": {
"copyToOutput": {
"include": ["config.json"]
}
}
这样,config.json
将与输出二进制文件位于同一文件夹中。
现在你可以做到:
env.Initialize(Directory.GetCurrentDirectory(), "UnitTesting");
甚至更好,参考Microsoft.Extensions.PlatformAbstractions
并使用:
env.Initialize(Microsoft.Extensions.PlatformAbstractions.PlatformServices.Default.Application.ApplicationBasePath, "UnitTesting");