如何修复无效的ReSharper测试名称视图?

时间:2018-11-12 08:19:57

标签: c# nunit resharper

我使用带有Resharper(2018.2.3)的NUnit(3.8.1)来实现:

    private static IEnumerable<TestCaseData> GetTests()
    {
        yield return T("foo.bA..r@gmail.com", "foobar@gmail.com");
        yield return T("foo.bA..r@example.com", "foo.ba..r@example.com");
        yield return T("user.name+tag+sorting@example.com", "user.name@example.com");
        yield return T("admin@mailserver1", "admin@mailserver1");
        yield return T("aaaafoo.bA..r@gmail.com", "aaafoobar@gmail.com");
    }

    private static TestCaseData T(string input, string output)
    {
        return new TestCaseData(input, output)
               {
                   TestName = string.Format("'{0}' => '{1}'", input, output)
               };
    }

    [Test]
    [TestCaseSource(nameof(GetTests))]
    public void Normalize(string input, string output)
    {
        //some test here
    }

但是当我运行测试时,在Resharper窗口中,我看到自己的名字被一些神秘的逻辑所裁剪:

invalid resharper test view

是什么导致我的名字变成这样?如何解决?

1 个答案:

答案 0 :(得分:2)

看起来ReSharper在运行NUnit参数化测试时在测试用例名称中存在点的问题:它只是丢弃点之前的所有内容。

例如,运行xUnit理论的ReSharper并没有这种问题,NUnit的控制台运行程序似乎也没有返回任何可能影响ReSharper行为的怪异现象。

要解决此问题,您可以使用SetName()方法为每个测试用例提供一个描述性名称,如下所示:

 private static IEnumerable<TestCaseData> GetTests()
    {
        yield return new TestCaseData("foo.bA..r@gmail.com", "foobar@gmail.com").SetName("GMail: dots removed, casing normalized to lower (1)");
        yield return new TestCaseData("foo.bA..r@example.com", "foo.ba..r@example.com").SetName("Example domain: dots intact, casing normalized to lower");
        yield return new TestCaseData("user.name+tag+sorting@example.com", "user.name@example.com").SetName("Example domain: local part stripped from + and everything that follows");
        yield return new TestCaseData("admin@mailserver1", "admin@mailserver1").SetName("Whatever you're checking here");
        yield return new TestCaseData("aaaafoo.bA..r@gmail.com", "aaafoobar@gmail.com").SetName("GMail: dots removed, casing normalized to lower (2)");
    }

只要您在名称中不使用圆点,就可以了:

enter image description here