【问题标题】:NUnit 3.X - How to pass dynamic parameters into a TestCase or TestCaseSource?NUnit 3.X - 如何将动态参数传递给 TestCase 或 TestCaseSource?
【发布时间】:2016-10-21 11:04:49
【问题描述】:
    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 中得到这个,所以我只有一个 Assert-line ? 我说的是这个:

  • m_grdDatan.m_cwd_pl.m_dW, 93344
  • m_grdDatan.m_cwd_pl_neb.m_dW, 93147.3
  • m_grdDatan.m_cwd_pl_pmax.m_dW, 92928.2 ....

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

【问题讨论】:

    标签: unit-testing testing nunit nunit-3.0


    【解决方案1】:

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

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

    测试用例源方法必须是静态的这一事实并不能阻止它创建 CGrunddaten 类的实例。测试本身都只是比较两个双精度数的相等性,不需要知道该类的任何信息。

    你可以这样写:

    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 块中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多