具有参数的Nunit测试设置方法

我们可以使用参数设置测试方法吗? 我需要为灯具中的每个测试设置不同的设置。

我们是否有假设的想法(或类似方式):

[SetUp] [Argument("value-1")] [Argument("value-2")] [Argument("value-3")] public void InitializeTest(string value) { //set env var with value } 

每次测试都会执行一次安装 ,对于一次测试,只有一个SetUp和TearDown。 您可以显式地从测试中调用Initialize方法,然后使用TestCase属性创建数据驱动的测试

 public void InitializeTest(string value) { //set env var with value } [TestCase("Value-1")] [TestCase("Value-2")] [TestCase("Value-3")] public void Test(string value) { InitializeTest(value); //Arange //Act //Assert } 

因此,您将有三个测试,每个测试使用不同的参数调用InitializeTest

可以使用带参数的TestFixture属性来完成。

如果类中的所有测试都依赖于相同的参数,那么这就是要走的路。

该类需要一个构造函数,其参数传递给TestFixture属性。

请参阅https://github.com/nunit/docs/wiki/TestFixture-Attribute上的参数化测试夹具

 [TestFixture("Oscar")] [TestFixture("Paul")] [TestFixture("Peter")] public class NameTest { private string _name; public NameTest(string name) { _name = name; } [Test] public void Test_something_that_depends_on_name() { //Todo... } [Test] public void Test_something_that_also_depends_on_name() { //Todo... } //... } 

此代码来自nunit文档网站:

 [TestFixture("hello", "hello", "goodbye")] [TestFixture("zip", "zip")] [TestFixture(42, 42, 99)] public class ParameterizedTestFixture { private readonly string eq1; private readonly string eq2; private readonly string neq; public ParameterizedTestFixture(string eq1, string eq2, string neq) { this.eq1 = eq1; this.eq2 = eq2; this.neq = neq; } public ParameterizedTestFixture(string eq1, string eq2) : this(eq1, eq2, null) { } public ParameterizedTestFixture(int eq1, int eq2, int neq) { this.eq1 = eq1.ToString(); this.eq2 = eq2.ToString(); this.neq = neq.ToString(); } [Test] public void TestEquality() { Assert.AreEqual(eq1, eq2); if (eq1 != null && eq2 != null) Assert.AreEqual(eq1.GetHashCode(), eq2.GetHashCode()); } [Test] public void TestInequality() { Assert.AreNotEqual(eq1, neq); if (eq1 != null && neq != null) Assert.AreNotEqual(eq1.GetHashCode(), neq.GetHashCode()); } } 

设置方法用于执行一些preTest作业,其中包括准备测试,如设置测试运行所需的任何值,您可以在设置方法中设置这些,而不是将值作为参数提供。