Eri*_*ric 27 xunit.net visual-studio .net-core visual-studio-2017
如果我使用项目属性页面在Visual Studio 2017中为.Net Core Web项目设置环境变量,我可以使用读取变量的值Environment.GetEnvironmentVariable
; 但是,当我为xUnit测试项目设置环境变量然后调试测试时,Environment.GetEnvironmentVariable
总是返回null.是否存在一个事实,即它是一个测试项目,应该阻止变量与Web项目一样使用?如果是这样,有没有办法可以为测试项目设置环境变量?谢谢.
Ily*_*kov 41
该GetEnvironmentVariable
在的xUnit测试精品工程.该问题是正确地设置一个变量.如果在Properties -> Debug
页面上设置变量,则会写入变量Properties\launchSettings.json
,Visual Studio会使用所选配置文件启动应用程序.如您所见,launchSettings.json
默认情况下甚至没有复制到输出文件夹.将此文件作为参数传递给dotnet run
或者是不可能的,dotnet test
如果在CI服务器上自动运行测试,则会导致明显的问题.因此,launchSettings.json
测试运动员不考虑这一点也就不足为奇了.
解决方案:有很多方法可以在xUnit中设置测试环境:
例如,此集合夹具设置所有环境变量launchSettings.json
:
public class LaunchSettingsFixture : IDisposable
{
public LaunchSettingsFixture()
{
using (var file = File.OpenText("Properties\\launchSettings.json"))
{
var reader = new JsonTextReader(file);
var jObject = JObject.Load(reader);
var variables = jObject
.GetValue("profiles")
//select a proper profile here
.SelectMany(profiles => profiles.Children())
.SelectMany(profile => profile.Children<JProperty>())
.Where(prop => prop.Name == "environmentVariables")
.SelectMany(prop => prop.Value.Children<JProperty>())
.ToList();
foreach (var variable in variables)
{
Environment.SetEnvironmentVariable(variable.Name, variable.Value.ToString());
}
}
}
public void Dispose()
{
// ... clean up
}
}
Run Code Online (Sandbox Code Playgroud)
设置Copy to output directory: Always
为launchSettings.json
允许从测试访问该文件.
对于 mstest 或 xunittest,在单元测试中使用环境变量的解决方案是通过为平台提供的“.runsettings”文件:
更新:这仅适用于 mstest。
Run Code Online (Sandbox Code Playgroud)<!-- File name extension must be .runsettings --> <RunSettings> <RunConfiguration> <EnvironmentVariables> <!-- List of environment variables we want to set--> <VARIABLE_XXXX>value X</VARIABLE_XXXX> <VARIABLE_YYYY>value Y</VARIABLE_YYYY> </EnvironmentVariables> </RunConfiguration> </RunSettings>
重要提示:路径是绝对的。
使用$(MSBuildProjectDirectory)变量将返回项目目录的绝对路径。
使用 .runsettings 的另一个选项位于下面的链接中:
归档时间: |
|
查看次数: |
9208 次 |
最近记录: |