【问题标题】:NUnit Test Per Database Row?每个数据库行的 NUnit 测试?
【发布时间】:2011-06-02 21:15:23
【问题描述】:

编辑:我是 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 中的测试。

【问题讨论】:

    标签: c# unit-testing nunit qa


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我认为 RunTest 是一个测试, RunTheTest 只是一个辅助方法。所以测试中的第一个断言将失败整个测试。在单元测试中,您不应将多个测试作为一个来运行。
      • 第一个Assert失败会导致测试结束
      猜你喜欢
      • 2015-11-27
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2012-05-18
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多