每个数据库行的NUnit测试?

3

我不知道是否可行,但是我想解释一下我的意图。

我想创建一个测试固件,使用来自数据库的5种不同类型的输入运行测试。

TestFixture
    Test using input1
    Test using input2
    Test using input3
    Test using input4
    Test using input5

这样,我可以从NUnit GUI中看到导致失败的确切输入,但我不知道如何做到这一点。目前,我的设置类似于:

[TestFixture]
public class Tester{
    [Test]
    public void RunTest(){
        var inputs = db.inputs.where(a=>a.id < 6).ToList();
        bool testSuccess=true;
        foreach(var input in inputs){
            bool success = RunTheTest(input);
            if(success==false){
                testSuccess=false;
            }
        }
        //Tell NUnit that the entire test failed because one input failed
    }
}

在这种情况下,在NUnit中,我看到:
Tester
    RunTest

尽管 RunTest 尝试了 5 个不同的输入,但我只知道是否有一个或多个输入失败,但我不知道哪个输入失败了。基本上我想问的是,是否可以根据我想从数据库中获取的任何内容动态创建在 NUnit GUI 中显示的测试。

2个回答

3

看一下TestCaseSource属性。这将让您定义另一个方法,在运行时,将为从源方法返回的每个项目创建测试用例。


0
在foreach循环中,你可以这样做:
Assert.True( success, string.Format("Input: {0}", input ))
或者你可以尝试使用ValueSourceAttribute,将sourceType设为一个帮助类,该类有一个方法返回名为sourceName的IEnumerable。这个方法的实现应该从数据库中获取输入值。

我认为RunTest是一个测试,而RunTheTest只是一个辅助方法。因此,测试中的第一个断言将导致整个测试失败。在单元测试中,您不应该将多个测试视为一个来运行。 - softveda
第一个失败的断言将导致测试结束。 - Pedro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接