1

.NET クラスの単体テストに Microsoft Unit Test を使用しています。ジェネリック型を使用するメソッドがあり、ウィザードを使用すると、2 つのメソッドが作成されます。1 つは GenericParameterHelper を使用するヘルパーです。

テストを特定のタイプに更新することはできますが、ジェネリックをテストするための最良のアプローチは何であるか疑問に思っています。

以下に、単体テスト ウィザードが作成した 2 つのテスト メソッドを示します。

 public void ContainsKeyTestHelper<TKey, TValue>()
    {
        IDictionary<TKey, TValue> dictionaryToWrap = null; // TODO: Initialize to an appropriate value
        ReadOnlyDictionary<TKey, TValue> target = new ReadOnlyDictionary<TKey, TValue>(dictionaryToWrap); // TODO: Initialize to an appropriate value
        TKey key = default(TKey); // TODO: Initialize to an appropriate value
        bool expected = false; // TODO: Initialize to an appropriate value
        bool actual;
        actual = target.ContainsKey(key);
        Assert.AreEqual(expected, actual);
    }

    [TestMethod()]
    public void ContainsKeyTest()
    {
        ContainsKeyTestHelper<GenericParameterHelper, GenericParameterHelper>();
    }

私がテストしているメソッド (カスタム ReadOnlyDictionary ( https://cuttingedge.it/blogs/steven/pivot/entry.php?id=29 ) から):

/// <summary>Determines whether the <see cref="T:ReadOnlyDictionary`2" />
/// contains the specified key.</summary>
/// <returns>
/// True if the <see cref="T:ReadOnlyDictionary`2" /> contains
/// an element with the specified key; otherwise, false.
/// </returns>
/// <param name="key">The key to locate in the
/// <see cref="T:ReadOnlyDictionary`2"></see>.</param>
/// <exception cref="T:System.ArgumentNullException">
/// Thrown when the key is null.
/// </exception>
public bool ContainsKey(TKey key)
{
    return this.source.ContainsKey(key);
}

TODO を持つ各値を初期化するには、どの値を使用すればよいですか?

4

1 に答える 1

2

ReadOnlyDictionary のカスタム バージョンで、ContainsKey メソッドをテストしています。この場合、テストされている主なポイントは、キーがディクショナリに追加されると、そのキーで呼び出されたときにこのメソッドが true を返すことだと思います。

この場合、追加された/追加されていないキーをチェックするときに適切な真/偽の応答が得られる限り、具体的には実際に辞書に入れられるものは問題ではありません。

したがって、テストでは、データが何であるかを気にしないため、TODO を削除するだけで済みます。

もう少し詳しく説明すると、カスタム クラスは、ソースメンバーが何であれ (少なくともこのメソッドでは) 単なるラッパーのように見えます。クラスを単体テストするもう 1 つの方法は、実際の辞書機能が機能していることをテストするのではなく、ソースを挿入し、モックを使用してソースが適切に操作されていることを確認することです。クラスについて詳しく知らなければ、この時点でどちらのアプローチが優れているとは言えません。

于 2012-10-26T20:14:34.363 に答える