5

NUnit 2.6.1でTestCaseSourceを使用して、異なるオブジェクトクラスコンストラクターパラメーターで同じアサートをテストしています。

つまり、

[Test, TestCaseSource("myConstructorsForMale")}
public void CheckMale(Person p) 
{
     Assert.That(p.IsMale);
}

static Person[] myConstructorsForMale = 
                     {
                         new Person("John"),
                         new Person(isMale=true),
                         new Person("Doe")
                     };

OK、すべて正常に実行されていますが、これはNUnitコンソールで受け取った結果です。

  • CheckMale
    • CheckMale(Person)
    • CheckMale(Person)
    • CheckMale(Person)

したがって、すべての反復で実行されるテストが何であるかがわかりません。いずれかが失敗した場合、失敗したテストを取得できません。

私の質問は次のとおりです。コメントなどでテストに渡されるパラメーターを特定する方法はありますか?(TestCaseSource属性の方法で)

ありがとう。

4

2 に答える 2

11

'native' NUnitor ReSharperをテストランナーとして使用する場合は、ToStringメソッドをオーバーライドして、適切なPerson定義を作成できます。たとえば、テストコードは次のようになります。

public class PersonTests
{
    [Test, TestCaseSource("myConstructorsForMale")]
    public void CheckMale(Person p)
    {
        Assert.That(p.IsMale);
    }

    static Person[] myConstructorsForMale = 
                 {
                     new Person("John"),
                     new Person{IsMale=true},
                     new Person("Doe")
                 };
}

人物クラスは次のようになります。

public class Person
{
    public Person(string name)
    {
        this.Name = name;
    }

    public Person() { }

    public string Name { get; set; }
    public bool IsMale { get; set; }

    public override string ToString()
    {
        return string.Format("Name:{0};IsMale:{1}", Name, IsMale);
    }
}

結果ウィンドウは次のようになります。 ReSharperテストの実行結果

また、おそらく使用しているネイティブNUnitテストランナーでも確認しました。また、Personsを適切に表示します。 NUnitテストランナーの結果

于 2012-10-19T13:27:37.057 に答える
4

Ilya Ivanovの答えをリフして、テスト対象のクラスをテストするためだけに変更したくない場合は、テストフィクスチャに「tostring」ロジックを配置できます。

次のようなメソッドをフィクスチャに追加します。

IEnumerable<TestCaseData> PersonTestCases()
{
  myConstructorsForMale.Select(
    p => new TestCaseData(p).SetName(string.Format("Name:{0};IsMale:{1}" ,p.Name, p.IsMale));
  );
}

これにより、リストTestCaseData内の各個人のインスタンスが作成されますmyConstructorsForMale。秘訣はName、インスタンスのプロパティを設定TestCaseDataして、テストランナーに何を表示するかを指示することです。

SetDescription一部のテストランナーは、よりもうまく機能する可能性がありSetNameます。

次に、TestCaseSource属性を次のように変更します。

[Test, TestCaseSource("PersonTestCases")]

これにより、次のようになります。

  • CheckMale
    • 名前:; IsMale:True
    • 名前:Doe; IsMale:False
    • 名前:ジョン; IsMale:False
于 2016-05-13T18:24:09.813 に答える