NUnit TestCaseAttribute使用NUnit VS Adapter导致AmbiguousMatchException

时间:2015-11-05 16:23:59

标签: unit-testing nunit azure-devops vs-unit-testing-framework parameterized-tests

我写了一堆使用TestCaseAttribute的单元测试。当我使用ReSharper单元测试运行器时,这些测试在我的本地机器上运行良好。不幸的是,当我使用NUnit VS Adapter 2.0.0.0通过Visual Studio运行测试时,我得到以下输出:

------ Run test started ------
NUnit VS Adapter 2.0.0.0 executing tests is started
Loading tests from D:\Projects\Ever\WebApp\Ever.UnitTests\bin\Debug\Ever.UnitTests.dll
Exception System.Reflection.AmbiguousMatchException, 
   Exception thrown executing tests in 
      D:\Projects\Ever\WebApp\Ever.UnitTests\bin\Debug\Ever.UnitTests.dll
NUnit VS Adapter 2.0.0.0 executing tests is finished
========== Run test finished: 0 run (0:00:00.8290488) ==========

我们使用Visual Studio Online托管构建服务器进行构建,依赖于测试适配器来运行我们的NUnit单元测试。这意味着我需要找到一种方法来使这个工作与属性(更喜欢)或我必须解决这个限制。

我是否必须放弃使用TestCaseAttribute,因为MSTest不支持参数化测试 12

1 个答案:

答案 0 :(得分:2)

在进一步调试和测试后,我得出结论,TestCaseAttribute不是问题的原因。我正在回答我自己的问题,而不是删除 1 ,以防其他人陷入与我相同的陷阱。

TestCaseAttribute正常工作,您可以通过以下测试看到。这些测试通过VS测试适配器和ReSharper测试运行器完美运行。

[TestFixture]
public class SimpleReproAttempt
{
    [Test]
    [TestCase(true, false)]
    [TestCase(false, true)]
    public void DoesNotReproduceIssue(bool a, bool b)
    {
        Assert.IsTrue(a || b);
    }

    [Test]
    [TestCase("", false, true)]
    [TestCase(null, true, false)]
    public void DoesNotReproduceIssue(string a, bool b, bool c)
    {
        Assert.IsTrue(b || c);
        Assert.IsNullOrEmpty(a);
    }
}

这个问题似乎只出现在an overloaded method with at least one of the overloads using async/await的测试中。

1:根据此信息修改我的问题会将其转换为chameleon question,并且不鼓励chameleon via self answer,因此我也驳回了该选项。