У меня есть пара вариантов, как я это вижу.Вы можете создать специализации DiscountOrderProcessor:
public class FullDiscountOrderProcessor : DiscountOrderProcessor
{
public FullDiscountOrderProcessor(IOrdersRepository repository, Order order):base(repository,order,discountPercentages.FullDiscountPercentage)
{}
}
public class ModestDiscountOrderProcessor : DiscountOrderProcessor
{
public ModestDiscountOrderProcessor (IOrdersRepository repository, Order order):base(repository,order,discountPercentages.ModestDiscountPercentage)
{}
}
и проверить, верен ли верный тип.
вы можете передать фабрику для создания DiscountOrderProcessor, который просто берет сумму, затем вы можете проверитьэто было вызвано с правильными параметрами.
Вы могли бы предоставить виртуальный метод для создания DiscountOrderProcessor и проверки, который вызывается с правильными параметрами.
Лично мне нравится первый вариант, но всеЭти подходы связаны с той же проблемой, что в конечном итоге вы не можете проверить фактическое значение, и поэтому кто-то может изменить размер вашей скидки, и вы не узнаете.Даже при первом подходе вы не сможете проверить, какое значение было применено к FullDiscountOrderProcessor.
Вам нужно как-то проверить фактические значения, которые оставляют вас с:
вы можете сделать свойства общедоступными (или внутренними - используя InternalsVisibleTo), чтобы вы могли их опросить.
вы можете взять возвращенный объект и проверить, правильно ли он применяет скидку к некоторому объекту, который вы передаете ему.
Лично я бы пошел на то, чтобы сделать свойства внутренними, но это зависит от того, как объекты взаимодействуют, и если передача фиктивного объекта в обработчик заказа со скидкой и проверка правильности его действия просты, то это может бытьлучшее решение.