首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NUnit -同名的多个属性?链接到需求

NUnit -同名的多个属性?链接到需求
EN

Stack Overflow用户
提问于 2014-03-05 02:22:02
回答 2查看 1K关注 0票数 3

我正在将我们所有的系统测试与测试用例和我们的需求联系起来。每个需求都有一个ID。每个测试用例/系统测试测试各种各样的需求。每个模块的代码链接到多个需求。

我正试图找到最好的方法,将每个系统测试与其驱动需求联系起来。

我希望做这样的事情:

代码语言:javascript
运行
复制
    [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分钟(企业医疗系统),因此“只运行所有这些测试”并不是一个可行的解决方案。我们这样做,但只是在通过我们的环境进行宣传之前。

有什么想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-05 03:11:24

您考虑过从自定义属性派生的NUnit.Framework.Property吗?

LINQPad 4“查询”(语言设置为C# Program )和对nunit.framework.dll (版本2.4.8)的引用(Version2.4.8)来看,以下类似的内容可能对您有用:

代码语言:javascript
运行
复制
// 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);
}
票数 2
EN

Stack Overflow用户

发布于 2014-05-27 21:20:58

由于某些原因,我无法在上面的评论中添加到google讨论帖子的链接,所以我也在这里添加了这个帖子。(链接为https://groups.google.com/forum/#!topic/nunit-discuss/ndV3VTPndck)

  1. 类别在TE中总是显示为“类别xxxxxxx",其中xxxxx是您发送到的任何字符串,如果不指定任何字符串,则它将是从CategoryAttribute派生的类的名称。
  2. 如果你想使用分类,你应该,就像查理在谷歌帖子上说的那样,每个要求使用一个条目。如果将字符串要求添加到值中,它看起来会非常好,但大多数都遵循上面(1)中的规则,它可能如下:

类别要求:FR12345 12345

代码:

代码语言:javascript
运行
复制
public class RequirementAttribute : CategoryAttribute
{
    public RequirementAttribute(string s)
        : base("Requirement:" + s)
    { }
}
  1. 如果您希望它显示为: RequirementFR12345,那么您必须使用一个属性,但是您不能有多个键,所以每个测试只能有一个这样的键。

代码:

代码语言:javascript
运行
复制
public class RequirementAttribute : PropertyAttribute
{
    public RequirementAttribute(string s)
        : base(s)
    {}
}

4:如果您希望每个测试都有多个需求,并且仍然有类似于(3)中的显示,那么您必须使键是唯一的。不需要看上去太糟。在下面的代码中,我刚刚给它添加了一个计数器。它将显示如下:

要求-1FR12345

要求-2FR23456

代码:

代码语言:javascript
运行
复制
 public class RequirementAttribute : PropertyAttribute
    {
       public RequirementAttribute(string[] array)
       {
           int i = 0;
           foreach (var s in array)
           {
               Properties.Add("Requirement-" + i, s);
               i++;
           }
       }
    }

你用它就像:

代码语言:javascript
运行
复制
 [Requirement(new[] { "1234", "2345" })]
   [Test]
   public void Test()
   { }

(如果您想要一个没有"new“的语法,前面的答案显示了使用param的语法。)

选项4将不按需求编号分组,而是按计数器分组。如果要按需求编号分组,可以使用选项5:

  1. 将需求号添加到键中,但将值保留为空。它将看起来像:

要求-FR12345 12345

这样,您还可以跳过前缀,并在TE中将每个需求作为自己的类别。

代码:

代码语言:javascript
运行
复制
public class RequirementAttribute : PropertyAttribute
{
    public RequirementAttribute(string[] array)
    {
        foreach (var s in array)
        {
            Properties.Add("Requirement-" +  s,"");
        }
    }
}

当然,你也可以跳过前缀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22187229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档