【问题标题】:Not all tests are run in parameterised NUnit TestFixture containing arrays并非所有测试都在包含数组的参数化 NUnit TestFixture 中运行
【发布时间】:2012-04-05 13:39:56
【问题描述】:

我有一个测试类如下:

[TestFixture("someurl1", new[] { "param1", "param2" }, 15)]
[TestFixture("someurl2", new[] { "param3" }, 15)]
public class my_test
{
    public my_test(string url, string[] fields, int someVal)
    {
        // test setup
    }
}

在 ReSharper 6.1 和 NUnit 2.5.10 中运行此测试时,测试没有运行两次,正如预期的那样,它只运行一次。在我看到的测试结果中列出了

my_test("someurl1", System.String[], 15)

这让我觉得这两个夹具被视为相同,并且 NUnit 没有区分两个测试中的字符串数组。

作为一种解决方法,我在构造函数中添加了一个虚拟参数。如果我为每个夹具设置不同的值,那么所有测试都会运行。

难道不能让 TestFixtures 的数组包含不同的值吗?我刚刚从 ReSharper 5 升级,所以我想知道这是否相关。我已经阅读了 6.x 中参数化测试的一些问题。

【问题讨论】:

  • 它在 NUnit 运行器中工作吗?
  • 另外,感谢您指出您可以使用参数化测试夹具,因为我不知道这是可能的。
  • 刚刚在 NUnit 运行器中尝试过,并且成功运行了所有测试。我认为这可能与 ReSharper 升级有关。
  • 我之前在使用 resharper 的跑步者时遇到过问题。我现在只坚持使用 NUnit。

标签: c# testing nunit resharper parameterized


【解决方案1】:
[TestFixture("someurl1", "param1|param2", 15)]
[TestFixture("someurl2", "param3", 15)]
public class my_test
{
    private string[] _fields;

    public my_test(string url, string fieldList, int someVal)
    {
        _fields = fieldList.Split('|');
        // test setup
    }

    [Test]
    public void listFields()
    {
        foreach (var field in _fields)
        {
            Console.WriteLine(field);
        }
    }
}

【讨论】:

    【解决方案2】:

    我认为这与在 TestFixture 构造函数中更新一个数组有关,我在某处读到了你不能这样做的地方。

    【讨论】:

      【解决方案3】:

      您是否尝试过在其下创建单个测试作为通用 TestFixture?类似的东西

      [TestFixture]
      public class my_test
      {
          private bool my_test(string url, string[] fields, int someVal)
          {
              // test setup
              return DidTestCompleteOk;
          }
      
          [Test]
          public void TestURL1()
          {
              Assert.IsTrue( my_test("someurl1", new[] { "param1", "param2" }, 15));
          }
      
          [Test]
          public void TestURL2()
          {
              Assert.IsTrue( my_test("someurl2", new[] { "param3" }, 15) );
          }
      }
      

      【讨论】:

        【解决方案4】:

        事实证明,如果参数化测试夹具的构造函数中出现任何问题,这就是绝对错误消息。当其他代码中的东西失败时,您不会得到返回的实际异常信息。

        因此,您可能应该将设置代码移至[SetUp][TestFixtureSetUp],或者确实确保您的构造函数正在执行而没有错误。但实际上你应该做第一个建议,只将测试夹具参数保存在构造函数中,并在另一个方法中对它们进行处理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多