NUnit 3.X - 如何将动态参数传递到 TestCase 或 TestCaseSource?

NUnit 3.X - How to pass dynamic parameters into a TestCase or TestCaseSource?

    CGrunddaten m_grdDaten;

    [SetUp]
    public void Init()
    {
        m_grdDaten = new CGrunddaten();
        m_grdDaten.m_cwdGeoH.m_dW = 325.0;
        m_grdDaten.m_cwd_tl.m_dW = 15;

    }


    [Test]
    public void TestMethod()
    {
        m_grdDaten.RechGrdDaten();
        Assert.That(m_grdDaten.m_cwd_pl.m_dW, Is.EqualTo(93344).Within(.1),"Außenluftdruck");
        Assert.That(m_grdDaten.m_cwd_pl_neb.m_dW, Is.EqualTo(93147.3).Within(.1), "Außenluftdruck Nebenluftberechnung");
        Assert.That(m_grdDaten.m_cwd_pl_pmax.m_dW, Is.EqualTo(92928.2).Within(.1), "Außenluftdruck max. zul. Unterdruck");
        Assert.That(m_grdDaten.m_cwdRho_l.m_dW, Is.EqualTo(1.124).Within(.001), "Dichte Außenluft");
        Assert.That(m_grdDaten.m_cwdRho_l_neb.m_dW, Is.EqualTo(1.184).Within(.001), "Dichte Außenluft Nebenluftberechnung");
        Assert.That(m_grdDaten.m_cwdRho_l_pmax.m_dW, Is.EqualTo(1.249).Within(.001), "Dichte Außenluft max. zul. Unterdruck");
    }

有没有办法在 TestCase 或 TestCaseSource 中获取它,以便我只有一个断言行? 我在说这个:

我知道 TestCase 和 TestCaseSource 是静态的....但还有其他方法吗?

进行此测试的最佳方法是使用尚未实现的多重断言功能,这样即使有些断言失败,所有断言也会 运行。

由于该功能尚不可用,我可以理解您希望将其纳入多个测试,并分别报告每个测试。当然,使用测试用例使这成为可能,即使这实际上在逻辑上只是一个测试。

测试用例源方法必须是静态的这一事实并不妨碍它创建 CG运行ddaten class 的实例。测试本身只是比较两个双打是否相等,不需要知道任何关于 class.

你可以这样写:

private static IEnumerable<TestCaseData> GrundDatenDaten
{
    var gd = new CGrunddaten();
    gd.m_cwdGeoH.m_dW = 325.0;
    gd.m_cwd_tl.m_dW = 15;
    gd.RechGrdDaten();

    yield return new TestCaseData(gd.m_cwd_pl.m_dW, 93344, .1, "Außenluftdruck");
    // und so weiter
}

[TestCaseSource("GrundDatenDaten")]
public void testMethod(object actual, object expected, object tolerance, string label)
{
    Assert.That(actual, Is.EqualTo(expected).Within(tolerance), label);
}

但是,我不太喜欢这样,因为它在数据源中隐藏了测试的真正功能。我认为您的原始公式是目前最好的方法,一旦该功能实现,您就可以将代码包含在 Assert.Multiple 块中。