Visual Studio C#单元测试-使用不同/多个测试初始化运行单元测试,是否多次运行同一个单元测试?

Visual Studio C#单元测试-使用不同/多个测试初始化运行单元测试,是否多次运行同一个单元测试?,c#,visual-studio,unit-testing,vs-unit-testing-framework,C#,Visual Studio,Unit Testing,Vs Unit Testing Framework,我想做的是: 创建一组单元测试 创建模拟、输入变量等初始化的各种不同排列/组合 根据一些参数对一组这样的初始化运行每个给定的单元测试 我该怎么做这样的事情呢 是否已有任何框架来处理此问题(即,在更改初始化时多次运行给定的测试)?你能提出一些设计或想法,让我做些什么来做这件事吗 我知道单元测试框架工作。我自己使用NUnit和Rhino Mock 下面是我需要的一个例子 [Test Initialize] Setup( <-possible parameter-> ) [Test Me

我想做的是:

  • 创建一组单元测试
  • 创建模拟、输入变量等初始化的各种不同排列/组合
  • 根据一些参数对一组这样的初始化运行每个给定的单元测试
  • 我该怎么做这样的事情呢

    是否已有任何框架来处理此问题(即,在更改初始化时多次运行给定的测试)?你能提出一些设计或想法,让我做些什么来做这件事吗

    我知道单元测试框架工作。我自己使用NUnit和Rhino Mock

    下面是我需要的一个例子

    [Test Initialize]
    Setup( <-possible parameter-> )
    
    [Test Method]
    TestA()
    
    [测试初始化]
    设置()
    [试验方法]
    种皮()
    
    现在我希望TestA()可以运行多次。每次测试初始化时,都会选择另一个初始化组合

    更多澄清

    让我们假设一个测试需要变量a、B、C。每个变量都是非常复杂的对象,最终结果是可以形成大量的组合。因此,我希望我能以某种方式创建一个测试初始化,它可以遍历这样的组合列表,从而初始化它们,运行TESTA,返回列表中的下一个初始化,再次运行TESTA,等等,直到列表用完。接下来,它为TESTB选择另一个列表,并再次遵循此过程


    至少我希望有一些能力能够运行给定的测试函数n次。剩下的我知道我可以构建一旦这成为可能

    您可能不需要任何特定于框架的插件就可以做到这一点,方法是创建一个包含所有测试函数的抽象基类,然后用多个类继承该基类,每个类都有自己的设置函数

    public abstract class MyTests { [Test] public void TestOne() { ... } [Test] public void TestTwo() { ... } } 公共抽象类MyTests { [测试] 公共void TestOne() { ... } [测试] 公共测试二() { ... } } [测试夹具] 公共类FirstSetup:MyTests { [设置] 公共作废设置() { ... } } [测试夹具] 公共类第二设置:MyTests { [设置] 公共作废设置() { ... } }
    我已经用其他语言完成了这项工作,但不确定各种C#框架将如何处理它。

    在nUnit中,您可以对简单类型使用[TestCase]属性:

    [Test]
    [TestCase("a", "b")]
    [TestCase("c", "b")]
    [TestCase("a", "d")]
    public void TestMethod(string param1, string param2){
       // run your test with those parameters
    }
    
    或者,您可以对复杂类型使用方法:

    [Test]
    [TestCaseSource("GetTestCases")]
    public void TestMethod(MyObject1 param1, MyObject2 param2){
       // run your test with those parameters
    }
    
    private IEnumerable GetTestCases(){
       yield return new TestCaseData( new MyObject1("first test args"), 
                                      new MyObject2("first test args"))
                            .SetName("SomeMeaningfulNameForThisTestCase" );
       yield return new TestCaseData( new MyObject1("2nd test args"), 
                                      new MyObject2("2nd test args"))
                            .SetName("SomeMeaningfulNameForThisTestCase2" );
    
    }
    
    您可以使用数据源在MS测试中执行类似操作:

    有很多可用的框架。。。在提问之前请先搜索一下你明白我在问什么吗?我知道有很多框架,我使用两到三个,我需要的是在初始化函数变化时重复运行给定的单元测试。嗯,测试初始化中的组合数量会阻止我使用这种方法,它们可以是指数级的,或者我希望它们能从一系列可能的初始化中得到。。另一方面,我不得不为3种不同的设置(3种不同的序列化程序)运行相同的测试,这正是我所需要的。谢谢现在这看起来很有希望,我将尝试一下:)
    [Test]
    [TestCaseSource("GetTestCases")]
    public void TestMethod(MyObject1 param1, MyObject2 param2){
       // run your test with those parameters
    }
    
    private IEnumerable GetTestCases(){
       yield return new TestCaseData( new MyObject1("first test args"), 
                                      new MyObject2("first test args"))
                            .SetName("SomeMeaningfulNameForThisTestCase" );
       yield return new TestCaseData( new MyObject1("2nd test args"), 
                                      new MyObject2("2nd test args"))
                            .SetName("SomeMeaningfulNameForThisTestCase2" );
    
    }