我将所有系统测试链接到测试用例和我们的要求。每个要求都有一个ID。每个测试用例/系统测试都会测试各种要求。每个代码模块都链接到多个要求。
我正在努力寻找将每个系统测试与其驾驶要求联系起来的最佳方式。
我希望做类似的事情:
[NUnit.Framework.Property("Release", "6.0.0")]
[NUnit.Framework.Property("Requirement", "FR50082")]
[NUnit.Framework.Property("Requirement", "FR50084")]
[NUnit.Framework.Property("Requirement", "FR50085")]
[TestCase(....)]
public void TestSomething(string a, string b...)
然而,由于属性是键值对,因此会破坏。系统不允许我使用相同的键具有多个属性。
我想要这样做的原因是,如果模块发生变化,可以测试我们系统中的特定要求。
不是在每个构建上运行超过1,000个系统测试,而是允许我们根据对代码所做的更改来定位要测试的内容。
一些系统测试运行时间超过5分钟(企业医疗保健系统),因此“只运行所有这些”并不是一个可行的解决方案。我们这样做,但只是在通过我们的环境推广之前。
思想?
答案 0 :(得分:2)
您是否考虑过来自NUnit.Framework.Property
的{{3}}?
类似下面的内容似乎可能对您的custom property attribute“查询”进行判断,语言设置为 C#Program 并引用nunit.framework.dll
(版本2.4) .8)补充说:
// main method to exercise a our PoC test case
void Main()
{
TestSomething("a", "b");
}
// our PoC custom property attribute
[AttributeUsage(AttributeTargets.Method, AllowMultiple=false)]
public class RequirementsAttribute : NUnit.Framework.PropertyAttribute
{
public RequirementsAttribute(string[] requirements)
: base(requirements)
{
}
}
// a test case using our custom property attribute to relate it to multiple requirements
[Requirements(new string[] { "FR50082", "FR50084" })]
[TestCase("PoCTest")]
public void TestSomething(string a, string b)
{
// blah, blah, blah
Assert.AreNotEqual(a, b);
}
答案 1 :(得分:0)
出于某种原因,我无法将谷歌讨论帖的链接添加到上面的评论中,所以我也在这里添加了帖子。 (链接为https://groups.google.com/forum/#!topic/nunit-discuss/ndV3VTPndck)
类别总是在TE中显示为"类别[xxxxxxx]",其中xxxxx是您发送的任何字符串,如果您没有指定任何字符串,它将是从CategoryAttribute派生的类的名称。
如果您想使用类别,您应该像查理在Google帖子中所说的那样,根据要求使用一个条目。如果你将字符串Requirement添加到该值,它看起来会很好,但大多数都遵循上面(1)中的规则,它可能是这样的:
类别[条件:FR12345]
代码:
public class RequirementAttribute : CategoryAttribute
{
public RequirementAttribute(string s)
: base("Requirement:" + s)
{ }
}
代码:
public class RequirementAttribute : PropertyAttribute
{
public RequirementAttribute(string s)
: base(s)
{}
}
4:如果您希望每次测试都有多个要求,并且仍然有类似(3)中显示的内容,则必须使密钥唯一。它不需要看起来太糟糕。在下面的代码中,我刚刚添加了一个计数器。 它将显示为:
要求-1 [FR12345]
要求-2 [FR23456]
代码:
public class RequirementAttribute : PropertyAttribute
{
public RequirementAttribute(string[] array)
{
int i = 0;
foreach (var s in array)
{
Properties.Add("Requirement-" + i, s);
i++;
}
}
}
你就像使用它一样:
[Requirement(new[] { "1234", "2345" })]
[Test]
public void Test()
{ }
(如果你想要一个没有" new"的语法,前面的答案会显示带有param的语法。)
选项4不按要求编号分组,而是按计数器分组。如果要按要求编号分组,可以使用选项5:
5。 将需求编号添加到密钥,但将值保留为空。 它看起来像:
要求-FR12345
通过这种方式,您还可以跳过前缀并将每个要求作为TE中自己的类别。
代码:
public class RequirementAttribute : PropertyAttribute
{
public RequirementAttribute(string[] array)
{
foreach (var s in array)
{
Properties.Add("Requirement-" + s,"");
}
}
}
而且,您当然也可以完全跳过前缀。