.net 为什么在使用TestCaseSource时nUnit测试会被忽略?

ctehm74n  于 2023-03-04  发布在  .NET
关注(0)|答案(1)|浏览(116)

我在nUnit 2.6.4.14350中很难让nUnit TestCaseSource属性正常工作。
当通过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获取器被命中。(在调用[TestFixtureSetUp]之前)。
  • [TestCaseSource(typeof(TestClass), ...)]不会改变任何东西。
  • public TestClass()不会改变任何东西。
  • public IEnumerable<TestCaseSource> CreateTestCasespublic IEnumerable CreateTestCases不会改变任何东西。
  • [TestCaseSource(typeof(TestClass), "asdfasdf")]导致失败:系统.反射.目标参数计数异常:参数计数不匹配。

我看到了this question,但是仍然不能让它工作。我也试过让它像this answer一样工作,结果是一样的。我想我一定是在做一些很愚蠢的事情,但是我太生气了,看不清它是什么。有人能给我点启发吗?

dl5txlt9

dl5txlt91#

您的问题很可能是由于您的测试运行器不支持TestCaseSource属性造成的,尤其是当它被报告为Create时。NUnit重命名使用TestCaseSource的测试,以将参数名称组合到测试名称中。对于您的测试,它应报告为createTest_id123(测试名称+参数值)。
使用NUnit GUI检查你的程序集,看看从那里运行测试时,测试是否按预期工作。如果是,那么这将确认你的TestRunner是问题所在。使用VS2012+,你可以使用NUnit测试适配器,通过Nuget安装来运行你的测试。其他插件,如Resharper(取决于版本)应该支持该属性,但我不确定什么版本将与VS2010一起工作。

相关问题