什么是xUnit runsettings等价?

时间:2016-07-19 12:43:37

标签: xunit

当我们使用MSTest时,我们有几个环境有自己的运行设置。由于微软放弃了MSTest,我们正在转向xUnit。无论是通过runsettings还是命令行属性,我都需要一种在xUnit测试中指定TestRunParameters的方法。 xUnit是否有像MSTest那样的原生方式,或者我需要提出自己的解决方案吗?

2 个答案:

答案 0 :(得分:0)

根据他们的GitHub问题(thisthis),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&lt;T&gt; 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 ...
}