如何参数化c#类

如何参数化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

当我们在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.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中的状态。