У меня есть класс контроллера, который принимает несколько параметров в ctor, который вводится во время выполнения.
Пример:
public ProductController(IProductRepositort productRepository,
IShippingService shippingService, IEmailProvider emailProvider)
{
...
}
Я обнаружил, что методы испытаний становятся огромными. Я настраиваю методы следующим образом:
[Test]
public void CanSendProduct()
{
//Code to set up stub
List<Product> products = new List<Product>();
for (int i = 0; i < length; i++)
{
products.Add(new Product()));
}
var mockProductRepository = new Mock<IProductRepository>();
mockProductRepository.Setup(x => x.GetProducts()).Returns(products);
//Code to set up stub
....
....
var mockShippingService = new Mock<IShippingService>();
mockShippingService.Setup(x => x.GetShippers()).Returns(shippers);
//Code to set up stub
.....
.....
var mockEmailProvider = new Mock<IEmailProvider>();
mockEmailProvider.Setup(x => x.Send()).Returns(provider);
//Execute Test
....
....
//Assert
....
....
}
Очевидно, что нецелесообразно повторять настройку макета в каждом методе этого тестового класса.
Как я могу создавать богатые объекты-насмешки, которые позволяют мне Поведенческая проверка моих тестов и в то же время минимизировать боль при настройке?
Каковы рекомендации TDD для решения этой проблемы?
Спасибо