当我们使用MSTest时,我们有几个环境有自己的运行设置。由于微软放弃了MSTest,我们正在转向xUnit。无论是通过runsettings还是命令行属性,我都需要一种在xUnit测试中指定TestRunParameters的方法。 xUnit是否有像MSTest那样的原生方式,或者我需要提出自己的解决方案吗?
答案 0 :(得分:0)
根据他们的GitHub问题(this和this),xUnit不支持这种方式。它具有基于XML和JSON的配置系统,现在不建议使用XML,因此请尝试根据其documentation
使用JSON答案 1 :(得分:0)
尽管在使用xUnit时仍可以使用RunSettings来控制vstest.console的某些方面,但当前版本没有本机传递参数的方法。我相信v3会传递某种参数。
现在您可以使用环境变量,但是如果您在同一系统上并行运行多个测试集,则可能会有冲突。
我使用一个基类,该基类读取具有该测试集的设置的TestSettings.json文件。使用以下代码,我可以传入新类型,并让基类json读取器读取它们。
/// <inheritdoc />
/// <summary>
/// Common TestBase which uses CommonSettingsModel. Use TestBase<T> to override with custom settings Type.
/// </summary>
public abstract class TestBase : TestBase<CommonSettingsModel>
{
}
/// <inheritdoc />
/// <summary>
/// Common TestBase for loading settings.
/// </summary>
/// <typeparam name="T">Type to read TestSettings.json file</typeparam>
public abstract class TestBase<T> where T : ICommonSettings, new()
{
/// <inheritdoc />
/// <summary>
/// Constructor loads Settings T
/// </summary>
protected TestBase()
{
Settings = SettingsUtil.GetSettings<T>();
}
/// <summary>
/// Settings T loaded from TestSettings.json
/// </summary>
protected T Settings { get; }
}
您还可以使用Class或AssemblyFixture进行相同类型的测试。
public class DatabaseFixture : IDisposable
{
public DatabaseFixture()
{
Db = new SqlConnection("MyConnectionString");
// ... initialize data in the test database ...
}
public void Dispose()
{
// ... clean up test data from the database ...
}
public SqlConnection Db { get; private set; }
}
public class MyDatabaseTests : IClassFixture<DatabaseFixture>
{
DatabaseFixture fixture;
public MyDatabaseTests(DatabaseFixture fixture)
{
this.fixture = fixture;
}
// ... write tests, using fixture.Db to get access to the SQL Server ...
}