使用 Nunit 测试适配器在 visual studio 2013 中按 class 名称和方法名称进行分组测试
Group test by class name and method name in visual studio 2013 with Nunit test adapter
我在使用 visual studio 测试资源管理器时遇到了这个问题:无法找到 select 测试的方法,我需要 运行:
我有很多测试 TestCaseSource
作为测试资源管理器在许多测试中翻译的输入数据,所以对于我的单一测试方法,我可以有 20-30 个条目。当我开始在我的 class 中进行许多测试时,select 单一方法的所有输入都是痛苦的
我知道我可以使用 Traits
,但它们不会呈现为层次结构,也不会嵌套在 class 分组下。
现在我只有 2 个方法合而为一 class 结果是这样的:
其中 select 将所有情况都用于一种方法是痛苦的,无法想象最后的情况,我什至可以使用 20 种这样的方法
有什么方法可以按项目分组测试,然后按 class 分组,然后按方法分组,而不必为每个测试都写 class 吗?
有关完整信息,这是我的代码
public class TestCase
{
public static IEnumerable TestCasesIsNumerico
{
get
{
yield return new TestCaseData("12").Returns(true);
yield return new TestCaseData("12345678901234567890").Returns(true);
yield return new TestCaseData("1,2").Returns(true);
yield return new TestCaseData("1.2").Returns(true);
yield return new TestCaseData("1.000,12").Returns(true);
yield return new TestCaseData("1,000.12").Returns(true);
yield return new TestCaseData("1.000.000").Returns(true);
yield return new TestCaseData("1,000,000").Returns(true);
yield return new TestCaseData("1.000.000.000.000").Returns(true);
yield return new TestCaseData("1,000,000,000,000").Returns(true);
yield return new TestCaseData("1.000.000,00").Returns(true);
yield return new TestCaseData("1,000,000.00").Returns(true);
yield return new TestCaseData("a").Returns(false);
yield return new TestCaseData("a120").Returns(false);
yield return new TestCaseData("12a0").Returns(false);
yield return new TestCaseData("120a").Returns(false);
yield return new TestCaseData("01").Returns(false);
yield return new TestCaseData("1.1.1").Returns(false);
yield return new TestCaseData("1,1,1").Returns(false);
yield return new TestCaseData("1.000.12").Returns(false);
yield return new TestCaseData("1,000,12").Returns(false);
}
}
public static IEnumerable TestCasesValoreNumero
{
get
{
yield return new TestCaseData("12").Returns(12);
yield return new TestCaseData("12345678901234567890").Returns(12345678901234567890);
yield return new TestCaseData("1,2").Returns(1.2);
yield return new TestCaseData("1.2").Returns(1.2);
yield return new TestCaseData("1.000,12").Returns(1000.12);
yield return new TestCaseData("1,000.12").Returns(1000.12);
yield return new TestCaseData("1.000.000").Returns(1000000);
yield return new TestCaseData("1,000,000").Returns(1000000);
yield return new TestCaseData("1.000.000.000.000").Returns(1000000000000);
yield return new TestCaseData("1,000,000,000,000").Returns(1000000000000);
yield return new TestCaseData("1.000.000,12").Returns(1000000.12);
yield return new TestCaseData("1,000,000.12").Returns(1000000.12);
}
}
}
[TestFixture]
public class UtilitaTests
{
[Test, TestCaseSource(typeof(TestCase), "TestCasesIsNumerico")]
public bool isValoreNumerico_RitornaVeroSeNumero(object o)
{
decimal d;
return Utilita.tryValoreNumerico(o, out d);
}
[Category("UtilitaTests-isValoreNumerico_RitornaNumeroCorretto")]
public decimal isValoreNumerico_RitornaNumeroCorretto(object o)
{
decimal d;
Utilita.tryValoreNumerico(o, out d);
return d;
}
}
不幸的是,除了在特征(类别)、测试程序集、类 等您已经找到的顶层进行分组之外,这是不可能的。
这是 Visual Studio Test Explorer 而非 NUnit 的限制。 NUnit 适配器仅向测试 window 提供信息,它不控制任何 UI,因此 NUnit 团队无法改进其工作方式。
我建议前往 Visual Studio UserVoice 并投票或输入问题以给 Test Explorer 一些爱。
您已经知道,但有些人没有意识到您可以在测试资源管理器中更改测试分组 Window。为此,请右键单击测试中的任何节点,然后 select 分组依据。
我在使用 visual studio 测试资源管理器时遇到了这个问题:无法找到 select 测试的方法,我需要 运行:
我有很多测试 TestCaseSource
作为测试资源管理器在许多测试中翻译的输入数据,所以对于我的单一测试方法,我可以有 20-30 个条目。当我开始在我的 class 中进行许多测试时,select 单一方法的所有输入都是痛苦的
我知道我可以使用 Traits
,但它们不会呈现为层次结构,也不会嵌套在 class 分组下。
现在我只有 2 个方法合而为一 class 结果是这样的:
其中 select 将所有情况都用于一种方法是痛苦的,无法想象最后的情况,我什至可以使用 20 种这样的方法
有什么方法可以按项目分组测试,然后按 class 分组,然后按方法分组,而不必为每个测试都写 class 吗?
有关完整信息,这是我的代码
public class TestCase
{
public static IEnumerable TestCasesIsNumerico
{
get
{
yield return new TestCaseData("12").Returns(true);
yield return new TestCaseData("12345678901234567890").Returns(true);
yield return new TestCaseData("1,2").Returns(true);
yield return new TestCaseData("1.2").Returns(true);
yield return new TestCaseData("1.000,12").Returns(true);
yield return new TestCaseData("1,000.12").Returns(true);
yield return new TestCaseData("1.000.000").Returns(true);
yield return new TestCaseData("1,000,000").Returns(true);
yield return new TestCaseData("1.000.000.000.000").Returns(true);
yield return new TestCaseData("1,000,000,000,000").Returns(true);
yield return new TestCaseData("1.000.000,00").Returns(true);
yield return new TestCaseData("1,000,000.00").Returns(true);
yield return new TestCaseData("a").Returns(false);
yield return new TestCaseData("a120").Returns(false);
yield return new TestCaseData("12a0").Returns(false);
yield return new TestCaseData("120a").Returns(false);
yield return new TestCaseData("01").Returns(false);
yield return new TestCaseData("1.1.1").Returns(false);
yield return new TestCaseData("1,1,1").Returns(false);
yield return new TestCaseData("1.000.12").Returns(false);
yield return new TestCaseData("1,000,12").Returns(false);
}
}
public static IEnumerable TestCasesValoreNumero
{
get
{
yield return new TestCaseData("12").Returns(12);
yield return new TestCaseData("12345678901234567890").Returns(12345678901234567890);
yield return new TestCaseData("1,2").Returns(1.2);
yield return new TestCaseData("1.2").Returns(1.2);
yield return new TestCaseData("1.000,12").Returns(1000.12);
yield return new TestCaseData("1,000.12").Returns(1000.12);
yield return new TestCaseData("1.000.000").Returns(1000000);
yield return new TestCaseData("1,000,000").Returns(1000000);
yield return new TestCaseData("1.000.000.000.000").Returns(1000000000000);
yield return new TestCaseData("1,000,000,000,000").Returns(1000000000000);
yield return new TestCaseData("1.000.000,12").Returns(1000000.12);
yield return new TestCaseData("1,000,000.12").Returns(1000000.12);
}
}
}
[TestFixture]
public class UtilitaTests
{
[Test, TestCaseSource(typeof(TestCase), "TestCasesIsNumerico")]
public bool isValoreNumerico_RitornaVeroSeNumero(object o)
{
decimal d;
return Utilita.tryValoreNumerico(o, out d);
}
[Category("UtilitaTests-isValoreNumerico_RitornaNumeroCorretto")]
public decimal isValoreNumerico_RitornaNumeroCorretto(object o)
{
decimal d;
Utilita.tryValoreNumerico(o, out d);
return d;
}
}
不幸的是,除了在特征(类别)、测试程序集、类 等您已经找到的顶层进行分组之外,这是不可能的。
这是 Visual Studio Test Explorer 而非 NUnit 的限制。 NUnit 适配器仅向测试 window 提供信息,它不控制任何 UI,因此 NUnit 团队无法改进其工作方式。
我建议前往 Visual Studio UserVoice 并投票或输入问题以给 Test Explorer 一些爱。
您已经知道,但有些人没有意识到您可以在测试资源管理器中更改测试分组 Window。为此,请右键单击测试中的任何节点,然后 select 分组依据。