如何参数化c#类
当我们在JUnit中编写测试时,我们可以参数化一个类的所有测试。如果我的类中有4个测试方法和5个参数,我将有20个测试运行 在Java中,我们会有类似如何参数化c#类,c#,C#,当我们在JUnit中编写测试时,我们可以参数化一个类的所有测试。如果我的类中有4个测试方法和5个参数,我将有20个测试运行 在Java中,我们会有类似 import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.Before; import org.junit.runners.Parameterized; import org.junit.runners.Param
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.Before;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
private Integer inputNumber;
private Boolean expectedResult;
private PrimeNumberChecker primeNumberChecker;
@Before
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}
// Each parameter should be placed as an argument here
// Every time runner triggers, it will pass the arguments
// from parameters we defined in primeNumbers() method
public PrimeNumberCheckerTest(Integer inputNumber, Boolean expectedResult) {
this.inputNumber = inputNumber;
this.expectedResult = expectedResult;
}
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}
// This test will run 4 times since we have 5 parameters defined
@Test
public void testPrimeNumberChecker() {
System.out.println("Parameterized Number is : " + inputNumber);
assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
我想要C#中类似的东西。我有一组在我的所有测试方法之间共享的变量(因为它们很大,需要一些时间来运行,所以由于每个测试都有IO,所以实例化会非常慢)。但是我想多次运行我的测试类,每次都更改测试类参数
在C#中,我们可以选择DataRows。但参数仅用于一种方法,而不是所有方法:
[TestClass]
public class UnitTest1
{
[DataRow("C:/Users/path1", 10)]
[DataRow("C:/Users/path", 20)]
[TestMethod]
public void AdditionTest(string path, int expectedResult)
{
MySlowToCreateClass underTest = new MySlowToCreateClass(path);
int actualResult = underTest.calculate();
Assert.AreEqual(expectedResult, actualResult);
}
[DataRow("C:/Users/path1", 5)]
[DataRow("C:/Users/path", 170)]
[TestMethod]
public void AdditionTest(string path, int expectedResult)
{
MySlowToCreateClass underTest = new MySlowToCreateClass(path);
int actualResult = underTest.calculateOtherThing();
Assert.AreEqual(expectedResult, actualResult);
}
}
有没有办法在C#中实现这一点?NUnit支持测试参数化。但这些只是测试方法,不是吗?我想参数化整个类execution.NUnit2(因为2.5)支持,如果使用遗留框架是可以接受的解决方法的话。我相信3号有一个提议,但没有完全实施。XUnit2决定不实现这个特性,我不确定它在XUnit3中的状态。