Ну, у вас есть несколько вещей, которые вам нужно разобраться. У вас есть две основные вещи, которые вам нужно знать: номенклатура и лучшие практики.
Сначала я хочу дать вам отличный видео-ресурс от великого тестировщика, Роя Ошерова:
Этот подкаст поможет
очень : http://www.hanselminutes.com/default.aspx?showID=187
Я перефразирую подкаст, хотя
(что вступительное слово Hanselminutes
ужасно):
В основном все, что вы делаете с
структура изоляции (например, Moq, Rhino Mocks, Type Mock и т. Д.) Называется
поддельный .
A fake - это объект, используемый во время
тест на то, что код, который вы тестируете
можете позвонить вместо производственного кода.
Подделка используется, чтобы изолировать код, который вы
пытаются проверить из других частей
ваше заявление.
Существует (в основном) два вида подделок : заглушки
и издевается .
A mock - это подделка, которую вы положили
поместите так, чтобы код, который вы тестируете
можете обратиться к нему, и вы утверждаете, что
звонок был сделан с правильным
параметры. Пример ниже просто
это с помощью изоляции Moq
основа:
[TestMethod]
public void CalculateTax_ValidTaxRate_DALCallIsCorrect()
{
//Arrange
Mock<ITaxRateDataAccess> taxDALMock = new Mock<ITaxRateDataAccess>();
taxDALMock.Setup(taxDAL => taxDAL.GetTaxRateForZipCode("75001"))
.Returns(0.08).Verifiable();
TaxCalculator calc = new TaxCalculator(taxDALMock.Object);
//Act
decimal result = calc.CalculateTax("75001", 100.00);
//Assert
taxDALMock.VerifyAll();
}
A заглушка почти такая же, как
издеваться, кроме того, что вы положили его на место
чтобы убедиться, что код, который вы тестируете
возвращает согласованные данные из его
позвонить (например, если ваш код звонит
слой доступа к данным, заглушка будет
вернуть поддельные данные), но вы не
утверждать против самого окурка. Тот
вы не хотите убедиться, что
метод называется ваш поддельный доступ к данным
слой - вы пытаетесь проверить
что-то другое. Вы предоставляете заглушку
чтобы получить метод, который вы пытаетесь
тест для работы в изоляции.
Вот пример с заглушкой:
[TestMethod]
public void CalculateTax_ValidTaxRate_TaxValueIsCorrect()
{
//Arrange
Mock<ITaxRateDataAccess> taxDALStub = new Mock<ITaxRateDataAccess>();
taxDALStub.Setup(taxDAL => taxDAL.GetTaxRateForZipCode("75001"))
.Returns(0.08);
TaxCalculator calc = new TaxCalculator(taxDALStub.Object);
//Act
decimal result = calc.CalculateTax("75001", 100.00);
//Assert
Assert.AreEqual(result, 8.00);
}
Обратите внимание, что мы тестируем
вывод метода, а не
тот факт, что метод сделал вызов
другой ресурс.
Moq действительно не создает API
Различие между макетом и заглушкой
(обратите внимание, что оба были объявлены
Mock<T>
), но использование здесь
важно при определении типа.
Надеюсь, это поможет вам разобраться.