【问题标题】:Why are nUnit tests just getting ignored when using TestCaseSource?为什么在使用 TestCaseSource 时 nUnit 测试会被忽略?
【发布时间】:2015-06-16 23:27:06
【问题描述】:

我很难让 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&lt;TestCaseSource&gt; CreateTestCasespublic IEnumberable CreateTestCases 不会改变任何东西。
  • [TestCaseSource(typeof(TestClass), "asdfasdf")] 导致失败:System.Reflection.TargetParameterCountException:参数计数不匹配。

我看到了this question,但仍然无法正常工作。我也试图让它像this answer 一样工作,结果相同。我想我一定是在做一些非常愚蠢的事情,但我太生气了,看不出它是什么。有大神能指教一下吗?

【问题讨论】:

  • 如果您在 TestCaseData 中使用复杂的对象,请始终确保它们的构造正确。 Nunit 不会对你大喊大叫,它只会忽略失败的测试用例。

标签: c# .net unit-testing nunit


【解决方案1】:

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

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

【讨论】:

  • 抱歉,我在问题中有一些错别字。没错,应该是public class TestClasspublic void Create(string Id)。感谢您的回答,但恐怕它不能解决我的问题。
  • @SWilliams 您应该编辑您的问题以更正拼写错误,这样他们就不会混淆其他没有阅读您评论的人的问题。您看到的测试应该命名为createTest_id123,如果不是,那么问题很可能是您的测试运行程序不支持 testcasesource 属性(带有几个修复的代码对我有用)。您是否通过 Nunit gui 尝试过?您使用的是什么测试运行器?
  • 不幸的是,我认为我没有权限编辑我的问题。非常感谢,我已经通过 NUnit UI 进行了尝试,它按预期工作!你是对的,这对我来说是个问题,因为我正在通过 VS2010 运行它。我可以安装什么东西来支持通过我的 IDE 运行的 TestCaseSource 属性吗?
  • @SWilliams 您可以随时编辑自己的问题。如果您之前尝试过但失败了,那么您可能是在我添加单元测试标签时这样做的。我使用通过 Nuget 包管理器安装的 NUnit 测试适配器,但我使用的是 VS2012。我不记得它是否适用于 VS2010。我相信像 Resharper 这样的插件应该支持它,但显然有一个与之相关的价格......
  • 我的错误,我已经编辑了问题,现在我已经切换到您在 VS2012 上的设置并且它正在工作。我在 VS2010 上确实有一个旧的 Resharper 版本,我想这是问题所在,但我找不到合适的扩展来让我通过 VS2010 运行它,所以改为升级。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多