У меня есть метод, который я пытаюсь выполнить модульное тестирование, использующее объект запроса, я хотел бы оцепить этот объект запроса для моих модульных тестов Этот объект запроса имеет зависимость (UnitOfWork). Я использую контейнер IOC / DI для создания экземпляров моих объектов в приложении. Однако я не хочу использовать контейнер во время TDD. У меня есть 2 варианта:
- Добавьте объект запроса к классу метода в качестве поля или свойства и вставьте его в качестве аргумента ctor. Это, однако, не правильно, поскольку этот метод 1 является единственным методом который будет использовать его, и если мне когда-нибудь понадобится добавить второй метод, использующий этот объект запроса, этот объект придется повторно создавать или сбрасывать после каждого использования.
- Добавить объект запроса к сигнатуре метода. Запах?
Есть ли другие варианты или паттерны для этого? Или я не так подхожу?
Вот некоторый псевдокод:
Вариант № 1
public class OrdersController
{
public OrdersController(IOrderQuery query)
{
this.query = query;
}
private readonly IOrderQuery query;
public Queryable<Order> OrdersWaiting()
{
var results = query(...);
...
}
}
Вариант № 2
public class OrdersController
{
public Queryable<Order> OrdersWaiting(IOrderQuery query)
{
var results = query(...);
...
}
}
И мой объект запроса
public class OrderQuery : IOrderQuery
{
public OrderQuery(IUnitOfWork unitOfWork)
{
...
}
}