每个数据库行的NUnit测试?

时间:2011-06-02 21:15:24

标签: c# unit-testing nunit qa

编辑:我是NUnit的新手。

我不知道这是否可行,但我会继续解释我正在尝试做什么。

我想创建一个测试夹具,它使用来自数据库的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 个答案:

答案 0 :(得分:3)

查看TestCaseSource属性。这将允许您定义另一种方法,该方法在运行时将为源方法返回的每个项创建测试用例。

答案 1 :(得分:0)

在foreach循环中你可以做到 Assert.True( success, string.Format("Input: {0}", input ));

或者,您可以尝试使用sourceType作为辅助类的ValueSourceAttribute,该类具有返回名为sourceName的IEnumerable的方法。此方法的实现应该从DB获取输入值。