【问题标题】:NUnit DataSource from a different class来自不同类的 NUnit 数据源
【发布时间】:2016-12-14 12:23:38
【问题描述】:

我正在尝试使用 N Unit 制作一个测试项目。我一切正常,现在但我想知道是否可以将测试用例拆分为一个完全独立的类,或者唯一可行的方法是将数据推送到文件或部分类?基本上我希望将数据放在一个单独的文件中,而不是将所有数据和测试放在一个文件中。或者也许更多的标准并为每个规则测试创建不同的类。

[Test, TestCaseSource("TenantsRules")]
    public void CheckDNQTenantsRules(DNQTenantData testData)
    {
        CoreServicesBroker.DNQCoreServiceBroker broker = new CoreServicesBroker.DNQCoreServiceBroker();
        string actualDNQReason = string.Empty;

        int actualReturnCode = broker.CheckDNQTenants(testData.FormCode, testData.StateCode, testData.EffectiveDate, testData.NumberOfTenants, ref actualDNQReason);

        Assert.AreEqual(testData.ExpectedDNQReturnCode, actualReturnCode);
        Assert.AreEqual(testData.ExpectedDNQReason, actualDNQReason);
    }

public static IEnumerable<DNQTenantData> TenantsRules()
    {
        yield return new DNQTenantData() { FormCode = 9, StateCode = "OH", EffectiveDate = DateTime.Now, NumberOfTenants = 7, ExpectedDNQReturnCode = 1, ExpectedDNQReason = "Number of Tenants exceeded." };
        yield return new DNQTenantData() { FormCode = 9, StateCode = "OH", EffectiveDate = DateTime.Now, NumberOfTenants = 5, ExpectedDNQReturnCode = 0, ExpectedDNQReason = "" };
    }

【问题讨论】:

  • 基类怎么样?但是很难说出您实际上要做什么,因为您没有发布实际代码来表达您要提取的确切内容。
  • 不确定 N 单元是否能做到这一点,但我可以试试。你会把数据放在基础中并从中得出测试吗?
  • 是的,但就像我说的,发布一些代码并告诉我们您想要提取的内容。

标签: c# unit-testing nunit


【解决方案1】:

我相信 NUnits TestCaseData 会解决你的问题:

[TestFixture]
public class YourTest
{
    [Test, TestCaseSource(typeof(YourTestCaseProvider), nameof(YourTestCaseProvider.TenantsRules)]
    public void CheckDNQTenantsRules(DNQTenantData testData)
    {
        CoreServicesBroker.DNQCoreServiceBroker broker = new CoreServicesBroker.DNQCoreServiceBroker();
        string actualDNQReason = string.Empty;

        int actualReturnCode = broker.CheckDNQTenants(testData.FormCode, testData.StateCode, testData.EffectiveDate, testData.NumberOfTenants, ref actualDNQReason);

        Assert.AreEqual(testData.ExpectedDNQReturnCode, actualReturnCode);
        Assert.AreEqual(testData.ExpectedDNQReason, actualDNQReason);
    }
}

public class YourTestCaseProvider
{
    public static IEnumerable TenantsRules()
    {
        yield return new TestCaseData(new DNQTenantData() { FormCode = 9, StateCode = "OH", EffectiveDate = DateTime.Now, NumberOfTenants = 7, ExpectedDNQReturnCode = 1, ExpectedDNQReason = "Number of Tenants exceeded." })
        yield return new TestCaseData(new DNQTenantData() { FormCode = 9, StateCode = "OH", EffectiveDate = DateTime.Now, NumberOfTenants = 5, ExpectedDNQReturnCode = 0, ExpectedDNQReason = "" });
    }
}

【讨论】:

  • 很高兴能帮上忙! ;)
  • 将您的数据放入一个单独的类中正是 TestCaseDataSource 的预期用途。使用测试类的能力得以保留,因为很多人已经习惯了,但我认为这不是构建事物的最佳方式。
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多