使用TestCaseSource时,为什么nUnit测试会被忽略?

时间:2015-06-16 13:29:35

标签: c# .net unit-testing nunit

我很难让nUnit TestCaseSource属性在nUnit 2.6.4.14350中正常工作。

当通过VS2010运行单元测试时,它只是说测试被忽略,没有任何关于原因的附加信息。 Create测试在测试结果查看器中显示为灰色。

在我的情况下,被测试的类是TestCaseSource本身。这就是我所拥有的:

public class TestClass
{
    static TestClass()     
    {
        PopulateIds();
    }

    public IEnumerable<object> CreateTestCases
    {
        get 
        {
            return _ids.Select(id => new TestCaseData(id).SetName("createTest_" + id));
        }
    }

    private static string[] _ids;

    private static void PopulateIds()
    {
        _ids = new string[] { "id123", // ... }
    }

    [TestFixtureSetUp]
    public void Init()
    {
        // this completes successfully
    }

    [Test, TestCaseSource("CreateTestCases")]
    public void Create(string Id)
    {
        // breakpoint here is never hit as test is ignored
    }
}

线索:

  • CreateBondTestCases getter受到了冲击。 (在调用[TestFixtureSetUp]之前)。
  • [TestCaseSource(typeof(TestClass), ...)]不会改变任何内容。
  • public TestClass()不会改变任何内容。
  • public IEnumberable<TestCaseSource> CreateTestCasespublic IEnumberable CreateTestCases不会改变任何内容。
  • [TestCaseSource(typeof(TestClass), "asdfasdf")]导致失败:System.Reflection.TargetParameterCountException:参数计数不匹配。

我看到了this question,但仍无法让它发挥作用。我也尝试让它像this answer一样工作,结果相同。我想我必须在这里做一些非常愚蠢的事情,但我太激怒了,不知道它是什么。请有人赐教我吗?

1 个答案:

答案 0 :(得分:1)

您的问题很可能是由于您的测试运营商不支持TestCaseSource属性,特别是如果它被报告为Create。 NUnit重命名使用TestCaseSource的测试,将参数名称组合到测试名称中。对于您的测试,应报告为createTest_id123(测试名称+参数值)。

使用NUnit GUI检查程序集,以查看从那里运行时测试是否按预期工作。如果他们这样做,那么这将确认您的TestRunner是问题。使用VS2012 +,您可以使用通过Nuget安装的NUnit测试适配器来运行测试。像Resharper这样的其他插件(取决于版本)应该支持该属性,但我不确定哪些版本适用于VS2010。