У меня есть метод, подобный
public abstract class Base
{
public void MethodUnderTest();
}
public class ClassUnderTest : Base
{
public override MethodUnderTest()
{
if(condition)
{
IMail mail = new Mail() { /* ... */ };
IMailer mailer = new Mailer() { /* ... */ }
mailer.Send(mail);
}
else
{
/* ... */
}
}
}
У меня есть модульные тесты для этого метода, и письмо отправляется самому себе, так что это не страшно (лучше, чем отсутствие теста), но я бы предпочел не отправлять почту.
- Проблема, с которой я столкнулся, заключается в том, что я не хочу тестировать определенный код в классе (т.е., если (testMode) возвращает; вместо отправки почты)
- Я не знаю много о DI, но я подумал о том, чтобы передать имитацию IMailer в MethodUnderTest, за исключением того, что он переопределяет базовый класс, и никакой другой класс, производный от Base, не нуждается в объекте IMailer (я не хочу заставлять разработчиков базы, чтобы взять ненужный IMailer в MethodUnderTest)
Что еще я могу сделать?
(примечание: IMail и IMailer являются частью внешней библиотеки для отправки электронной почты. Она написана на месте, поэтому я могу изменять все, что мне нравится, если это необходимо, хотя я не вижу необходимости в этой ситуации)