3

すべてのシステム テストをテスト ケースと要件にリンクしています。すべての要件には 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...)

ただし、Property は Key-Value ペアであるため、これは機能しません。システムは、同じキーを持つ複数のプロパティを持つことを許可しません。

私がこれを望んでいる理由は、これらの要件に触れるモジュールが変更された場合に、システム内の特定の要件をテストできるようにするためです。

これにより、ビルドごとに 1,000 を超えるシステム テストを実行するのではなく、コードに加えられた変更に基づいてテスト対象を絞り込むことができます。

一部のシステム テストは 5 分以上実行されるため (エンタープライズ ヘルスケア システム)、「すべてを実行するだけ」は実行可能なソリューションではありません。私たちはそれを行いますが、私たちの環境を通じて宣伝する前にのみです.

考え?

4

2 に答える 2

2

から派生したカスタム プロパティ属性を検討しましたNUnit.Framework.Propertyか?

次のようなものは、言語がC# プログラムに設定され、 (バージョン 2.4.8)への参照が追加されたLINQPad 4の「クエリ」で判断すると、うまくいくように思えます。nunit.framework.dll

// 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);
}
于 2014-03-05T03:11:24.473 に答える
0

何らかの理由で、Google ディスカッションの投稿へのリンクを上記のコメントに追加できなかったので、ここにも投稿を追加しました。(リンクはhttps://groups.google.com/forum/#!topic/nunit-discuss/ndV3VTPndck )

  1. カテゴリは常に「Category [xxxxxxx]」として TE に表示されます。ここで、xxxxx は送信する文字列です。何も指定しない場合は、CategoryAttribute から派生したクラスの名前になります。

  2. カテゴリを使用する場合は、Charlie が Google の投稿で述べたように、要件ごとに 1 つのエントリを使用する必要があります。文字列 Requirement を値に追加すると、見栄えがよくなりますが、ほとんどは上記の (1) の規則に従います。次のようになります。

カテゴリ[必須:FR12345]

コード:

public class RequirementAttribute : CategoryAttribute
{
    public RequirementAttribute(string s)
        : base("Requirement:" + s)
    { }
}
  1. Requirement[FR12345] のように表示したい場合は、プロパティを使用する必要がありますが、複数のキーを持つことはできないため、テストごとに 1 つだけです。

コード:

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,"");
        }
    }
}

もちろん、プレフィックスを完全にスキップすることもできます。

于 2014-05-27T21:20:58.240 に答える