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
[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" );
}