当我们使用MSTest时,我们有几个环境有自己的运行设置.由于微软放弃了MSTest,我们正在转向xUnit.无论是通过runsettings还是命令行属性,我都需要一种在xUnit测试中指定TestRunParameters的方法.xUnit是否有像MSTest那样的原生方式,或者我是否需要提出自己的解决方案?
虽然您在使用 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; }
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用 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 ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |