В нашей команде есть участники, которые только начинают наращивать модульное тестирование, и мы боремся с некоторой терминологией. Я хотел бы определить имя для конкретного шаблона. Я надеюсь, что есть один, который уже принят другими разработчиками, но если нет, я бы хотел придумать тот, который будет описательным и облегчит обсуждение стратегий тестирования.
Этот шаблон довольно часто используется для тестирования абстрактных методов, но также удобен, когда объект создает новый объект (для случаев, когда DI не работает или нежелателен). Основной шаблон заключается в использовании внутреннего класса, расширяющего тестируемый класс, для предоставления защищенных методов.
Рассмотрим следующий код (псевдокод, основанный на Java, но должен переводиться на большинство языков):
Класс для тестирования:
public class MyClass {
public void send() {
//do something
}
protected MailMessage createNewMailMessage() {
return new MailMessage();
}
}
Тест:
public class MyClassTest {
private MyClass myClass = new TestableMyClass();
private MailMessage mockMessage = mock(MailMessage.class);
public void setup() {
((TestableMyClass)myClass).setMailMessage(mockMessage);
}
// Do some tests //
private class TestableMyClass extends MyClass {
private MailMessage mailMessage;
public void setMailMessage(MailMessage mailMessage) {
this.mailMessage = mailMessage;
}
protected MailMessage createNewMailMessage() {
return mailMessage;
}
}
}
Итак, как вы называете эту модель? TestableMyClass - «Mock» -объект, но поскольку он не управляется фальшивой структурой, похоже, что для описания этого паттерна должен быть другой термин Есть предложения или идеи?