![](/img/trans.png)
[英]Visual Studio Unit Test: why test run inconclusive whereas testing same float values?
[英]Visual Studio C# unit testing - Run Unit test with varied/multiple test initializations, Run same unit test multiple times?
我想要做的是:
我该怎么做这样的事情?
是否已经有任何框架来处理这个问题(即在更改初始化时多次运行给定的测试)? 你能否提出任何可以做到这一点的设计或想法?
我知道单元测试框架的工作原理。 我自己使用NUnit和Rhino嘲笑。
下面显示的是我需要的一个例子。
[Test Initialize]
Setup( <-possible parameter-> )
[Test Method]
TestA()
现在我希望TestA()多次运行。 每次Test initialize都会选择另一个初始化组合。
更多澄清
让我们假设测试需要变量A,B,C。它们中的每一个都是非常复杂的对象,最终结果是可以形成大量的组合。 所以我希望以某种方式我可以创建一个测试初始化,可以迭代这样的组合列表,所以它会初始化它们,运行TESTA,返回列表中的下一个初始化,再次运行TESTA等等,直到列表用完了。 接下来,它为TESTB选择另一个列表,并再次遵循此过程。
至少我希望有一些能力能够运行给定的TEST功能n次。 其余的我知道我可以建立一旦这是可能的
在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
}
或者,您可以对复杂类型使用TestCaseSource方法:
[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" );
}
您可以使用DataSource在MS-Test中执行类似的操作: http : //codeclimber.net.nz/archive/2008/01/18/How-to-simulate-RowTest-with-MS-Test.aspx
您可以通过创建包含所有测试函数的抽象基类,然后使用多个类继承该基类,每个类都有自己的设置函数,而无需任何特定于框架的插件。
public abstract class MyTests { [Test] public void TestOne() { ... } [Test] public void TestTwo() { ... } }
[TestFixture] public class FirstSetup : MyTests { [Setup] public void Setup() { ... } } [TestFixture] public class SecondSetup : MyTests { [Setup] public void Setup() { ... } }
我用其他语言完成了这个,但不确定各种C#框架将如何处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.