Как я читал в прошлом, вот что, как мне кажется, означает каждый термин
Заглушка
Здесь вы заменяете результат метода на известное значение, чтобы код работал без проблем. Например, допустим, у вас было следующее:
public int CalculateDiskSize(string networkShareName)
{
// This method does things on a network drive.
}
Вам все равно, какое будет возвращаемое значение этого метода, это не имеет значения. Кроме того, это может вызвать исключение при выполнении, если сетевой диск недоступен. Таким образом, вы закрываете результат, чтобы избежать потенциальных проблем с выполнением метода.
В итоге вы делаете что-то вроде:
sut.WhenCalled(() => sut.CalculateDiskSize()).Returns(10);
Подделка
С помощью подделки вы возвращаете поддельные данные или создаете поддельный экземпляр объекта. Классическим примером являются классы репозитория. Возьмите этот метод:
public int CalculateTotalSalary(IList<Employee> employees) { }
Обычно вышеуказанный метод передается коллекции сотрудников, считанных из базы данных. Однако в ваших модульных тестах вы не хотите получать доступ к базе данных. Итак, вы создаете поддельный список сотрудников:
IList<Employee> fakeEmployees = new List<Employee>();
Затем вы можете добавить элементы в fakeEmployees и подтвердить ожидаемые результаты, в данном случае общую зарплату.
Моки
При использовании фиктивных объектов вы намереваетесь проверить какое-то поведение или данные на этих фиктивных объектах. Пример:
Вы хотите убедиться, что определенный метод был выполнен во время тестового запуска, вот общий пример с использованием фреймворка Moq mocking:
public void Test()
{
// Arrange.
var mock = new Mock<ISomething>();
mock.Expect(m => m.MethodToCheckIfCalled()).Verifiable();
var sut = new ThingToTest();
// Act.
sut.DoSomething(mock.Object);
// Assert
mock.Verify(m => m.MethodToCheckIfCalled());
}
Надеюсь, это поможет немного прояснить ситуацию.
РЕДАКТИРОВАТЬ: Рой Ошеров - хорошо известный сторонник разработки через тестирование, и у него есть очень хорошая информация по этой теме. Вы можете найти это очень полезным:
http://artofunittesting.com/
person
Jason Evans
schedule
15.02.2013