我使用带有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窗口中,我看到自己的名字被一些神秘的逻辑所裁剪:
是什么导致我的名字变成这样?如何解决?
答案 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)");
}
只要您在名称中不使用圆点,就可以了: