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 中获取它,以便我只有一个断言行?
我在说这个:
- m_grdDaten.m_cwd_pl.m_dW, 93344
- m_grdDaten.m_cwd_pl_neb.m_dW, 93147.3
- m_grdDaten.m_cwd_pl_pmax.m_dW, 92928.2
....
我知道 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 块中。
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 中获取它,以便我只有一个断言行? 我在说这个:
- m_grdDaten.m_cwd_pl.m_dW, 93344
- m_grdDaten.m_cwd_pl_neb.m_dW, 93147.3
- m_grdDaten.m_cwd_pl_pmax.m_dW, 92928.2 ....
我知道 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 块中。