6

NUnit 2.5.3 TestCaseSource 属性を使用し、ファクトリを作成してテストを生成しています。このようなもの:

[Test, TestCaseSource(typeof(TestCaseFactories), "VariableString")]
public void Does_Pass_Standard_Description_Tests(string text)
{
    Item obj = new Item();
    obj.Description = text;
}

私のソースはこれです:

public static IEnumerable<TestCaseData> VariableString
{
    get
    {
        yield return new TestCaseData(string.Empty).Throws(typeof(PreconditionException))
            .SetName("Does_Reject_Empty_Text");
        yield return new TestCaseData(null).Throws(typeof(PreconditionException))
            .SetName("Does_Reject_Null_Text");
        yield return new TestCaseData("  ").Throws(typeof(PreconditionException))
            .SetName("Does_Reject_Whitespace_Text");
    }
}

私ができる必要があるのは、変数文字列に最大長チェックを追加することですが、この最大長はテスト対象のクラスのコントラクトで定義されています。私たちの場合、単純なパブリック構造体です:

   public struct ItemLengths
    {
        public const int Description = 255;
    }

テスト ケース ジェネレーターに値を渡す方法が見つかりません。静的共有値を試しましたが、これらは取得されません。コードが変更されるたびにこのファイルを再生成する必要があるため、ファイルに保存したくありません。

テストケースに次の行を追加します。

yield return new TestCaseData(new string('A', MAX_LENGTH_HERE + 1))
    .Throws(typeof(PreconditionException));

コンセプトとしてはかなり単純なことですが、私には不可能なことだと思います。助言がありますか?

4

2 に答える 2

2

テストのパラメーターを文字列ではなくクラスとして変更します。そのようです:

public class StringTest { public string testString; public int maxLength; }

次に、このクラスを構築して、引数として TestCaseData コンストラクターに渡します。そうすれば、文字列やその他の任意の引数を渡すことができます。

もう 1 つのオプションは、テストに string と int の 2 つの引数を持たせることです。

次に、TestCaseData( "mystring", 255) の場合。複数の引数を持つことができることに気付きましたか?

ウェイン

于 2010-10-30T03:58:42.940 に答える
1

私はあなたのような同様の問題に直面し、小さな NUnit アドインと、NUnit TestCaseSourceAttribute を拡張するカスタム属性を作成することになりました。私の特定のケースでは、ファクトリ メソッドにパラメーターを渡すことに興味はありませんでしたが、同じ手法を簡単に使用して目的を達成することができました。

それほど難しくはなく、3 つの小さなクラスのようなものを書くだけで済みました。私のソリューションの詳細については、カスタム testcasesource を使用した nunit によるブラックボックス テスト を参照してください

PS。この手法を使用するには、NUnit 2.5 (少なくとも) を使用する必要があります。頑張ってください。

于 2011-12-12T10:51:02.200 に答える