Издевательство над самим SUT

Иногда мне хочется поиздеваться над самим испытуемым, я знаю, это выглядит странно.

Вот пример. Я использую C #, но это не важно. Представьте, что у вас есть класс, управляющий некоторой коллекцией. У него есть методы

public void Insert(int position, T element)

и

public void Delete(int position)

. Логика этих методов не очень проста. Помимо изменения коллекции, они могут, например, вызывать события или подписываться на события / отказываться от них, или получать / освобождать ресурсы, или выполнить вычисления. Эти методы покрыты модульными тестами, проверяющими эту функциональность.

Теперь вы добавляете метод

public void Replace(int position, T element)
{
    Delete(position);
    Insert(position, element);
}

Я не совсем уверен, но мне не стоит тестировать все эти вещи снова для этого метода. Вместо этого имеет смысл проверить, действительно ли этот метод вызывает два первых.

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

Можно ли делать то, что я хочу? Если нет, то почему? Является ли это непреднамеренным недостатком издевательского подхода или это намеренно. Если во-первых, есть ли обходные пути? Во-вторых, как мне разработать и протестировать описанную программу?

5
задан Dmitry Tashkinov 20 April 2011 в 05:50
поделиться