Как выполнить модульное тестирование реализации IDictionary - PullRequest
4 голосов
/ 16 марта 2009

При реализации чего-то, что реализует IDictionary, что мне следует тестировать?

Кажется излишним тестировать весь интерфейс, но тогда что я знаю? Я только несколько дней проходил юнит-тестирование ...

Ответы [ 3 ]

2 голосов
/ 16 марта 2009

Проверьте все ваши точки интерфейса, но остерегайтесь соблазна протестировать платформу.

1 голос
/ 16 марта 2009

Каждый публичный член вашего IDictionary должен быть протестирован. Вы также должны настроить некоторые тесты, чтобы убедиться, что ваш IDictionary ведет себя так же, как некоторые другие конкретные реализации IDictionary. Фактически, вы можете структурировать большинство ваших тестов так:

void Test_IDictionary_Add(IDictionary a, IDictionary b)
{
    string key = "Key1", badKey = 87;
    int value = 9, badValue = "Horse";

    a.Add(key, value);
    b.Add(key, value);

    Assert.That(a.Count, Is.EqualTo(b.Count));
    Assert.That(a.Contains(key), Is.EqualTo(b.Contains(key)));
    Assert.That(a.Contains(key), Is.EqualTo(a.ContainsKey(key)));
    Assert.That(a.ContainsKey(key), Is.EqualTo(b.ContainsKey(key)));
    Assert.That(a.ContainsValue(value), Is.EqualTo(b.ContainsValue(value)));
    Assert.That(a.Contains(badKey), Is.EqualTo(b.Contains(badKey)));
    Assert.That(a.ContainsValue(badValue), Is.EqualTo(b.ContainsValue(badValue)));
    // ... and so on and so forth
}

[Test]
void MyDictionary_Add()
{
    Test_IDictionary_Add(new MyDictionary(), new Hashtable());
}
1 голос
/ 16 марта 2009

Вы должны проверить все, что вы реализуете. Если у вас есть код, который вызывается через открытый интерфейс, должен быть модульный тест, который поддерживает это. Если вы пишете код, его стоит протестировать.

Исключением могут быть простые свойства (Свойство {get; set;})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...