7

次のようなテストクラスがあります。

[TestFixture("someurl1", new[] { "param1", "param2" }, 15)]
[TestFixture("someurl2", new[] { "param3" }, 15)]
public class my_test
{
    public my_test(string url, string[] fields, int someVal)
    {
        // test setup
    }
}

ReSharper 6.1 および NUnit 2.5.10 でこのテストを実行すると、予想どおり、テストは 2 回実行されず、1 回だけ実行されます。リストされているテスト結果に

my_test("someurl1", System.String[], 15)

これは、2 つのフィクスチャが同じものとして扱われ、NUnit が 2 つのテストの文字列配列を区別していないと思わせます。

回避策として、コンストラクタにダミー パラメータを追加しました。これをフィクスチャごとに異なる値に設定すると、すべてのテストが実行されます。

異なる値を含む配列を持つ TestFixtures を持つことはできませんか? ReSharper 5 からアップグレードしたばかりなので、それが関係しているかどうか疑問に思っています。6.x のパラメータ化されたテストに関するいくつかの問題について読みました。

4

4 に答える 4

4
[TestFixture("someurl1", "param1|param2", 15)]
[TestFixture("someurl2", "param3", 15)]
public class my_test
{
    private string[] _fields;

    public my_test(string url, string fieldList, int someVal)
    {
        _fields = fieldList.Split('|');
        // test setup
    }

    [Test]
    public void listFields()
    {
        foreach (var field in _fields)
        {
            Console.WriteLine(field);
        }
    }
}
于 2012-12-20T13:46:16.680 に答える
0

これは、パラメータ化されたテスト フィクスチャのコンストラクタで何らかの問題が発生した場合の絶対的なエラー メッセージであることがわかります。他のコードで何かが失敗した場合のように、実際の例外情報が返されることはありません。

したがって、おそらくセットアップ コードを[SetUp]または[TestFixtureSetUp]または本当にコンストラクターがエラーなしで実行されていることを確認する必要があります。しかし、実際には最初の提案を行う必要があり、コンストラクターにテスト フィクスチャ パラメーターのみを保存し、別のメソッドでそれらを使用して何かを行う必要があります。

于 2013-05-30T08:42:26.677 に答える
0

これは、TestFixture コンストラクターで配列を新規作成することに関連していると思います。それができないことをどこかで読みました。

于 2012-04-10T09:16:31.223 に答える
0

その下に個々のテストを汎用 TestFixture として作成しようとしましたか??? 何かのようなもの

[TestFixture]
public class my_test
{
    private bool my_test(string url, string[] fields, int someVal)
    {
        // test setup
        return DidTestCompleteOk;
    }

    [Test]
    public void TestURL1()
    {
        Assert.IsTrue( my_test("someurl1", new[] { "param1", "param2" }, 15));
    }

    [Test]
    public void TestURL2()
    {
        Assert.IsTrue( my_test("someurl2", new[] { "param3" }, 15) );
    }
}
于 2012-10-22T11:35:23.757 に答える