Изменить:
Кажется, пытаясь найти решение своей проблемы, я размыл всю проблему. Поэтому я немного изменяю вопрос.
Предположим, у меня есть этот класс:
public class ProtocolMessage : IMessage
{
public IHeader GetProtocolHeader(string name)
{
// Do some logic here including returning null
// and throw exception in some cases
return header;
}
public string GetProtocolHeaderValue(string name)
{
IHeader header = GetProtocolHeader(name);
// Do some logic here including returning null
// and throw exception in some cases
return value;
}
}
На самом деле не важно, что происходит в этих методах. Важно то, что у меня есть несколько модульных тестов для охвата метода GetProtocolHeader
, охватывающих все ситуации (возвращая правильный заголовок, ноль или исключение), и теперь я пишу модульные тесты для GetProtocolHeaderValue
.
Если GetProtocolHeaderValue
будет зависеть от внешней зависимости, я смогу смоделировать ее и внедрить (я использую Moq + NUnit). Тогда мой модульный тест просто протестировал бы ожидание того, что была вызвана внешняя зависимость, и вернул ожидаемое значение. Внешняя зависимость была бы проверена его собственным модульным тестом, и я бы сделал, но как правильно поступить в этом примере, где метод не является внешней зависимостью?
Разъяснение проблемы:
Я считаю, что мой набор тестов для GetProtocolHeaderValue
должен тестировать ситуацию, когда GetProtocolHeader
возвращает заголовок, ноль или исключение. Итак, главный вопрос: стоит ли писать тесты, в которых действительно будет выполняться GetProtocolHeader
(некоторые тесты будут продублированы, потому что они будут тестировать тот же код, что и тесты для самого GetProtocolHeader
), или мне следует использовать метод имитации, описанный @adrift и @ Эрик Николсон, где я не буду запускать настоящий GetProtoclHeader
, а просто сконфигурирую mock для возврата заголовка, нуля или исключения при вызове этого метода?