Поскольку политики покупают их. Что-либо политики достают в движениях, чтобы гадить, потому что 99% времени они - только опыт, находится в баллотировании на должность, не делая вещей как соответствующая проверка аппаратного и программного обеспечения.
кроме того, вознаграждения.
<час>вред истины, не так ли?
Если у вас есть выбор, вы почти всегда должны предоставлять конструктор, позволяющий вводить зависимости. Вы все еще можете сохранить удобный конструктор (хотя некоторые утверждают, что не следует):
public Brain() : this(new Hand(), new Mouth()) { }
Тем не менее, в дополнение к Isolator вы можете проверить последние сборки Pex ( 0.17 ), которые включают молей , которые обеспечивают механизм, аналогичный Swap
изолятора.
Лично я не думаю, что это хорошо.
Для меня DI обеспечивает больше пользы, чем просто тестируемость, поэтому неразумно отказываться от этого, даже если инструмент позволяет это делать. См. Также этот вопрос и первый ответ на него.
Moles , структура обхода, которая поставляется с Pex , также позволяет сделать это ... но с другим синтаксисом.
MHand.New = (me) => {
new MHand(me) {
TouchIronIron = iron => {}
};
};
Обратите внимание, что ваш пример противоречив.
AFAIK, TypeMock - единственная структура, которая допускает этот сценарий, и, вероятно, еще долго будет. Причина в том, что он использует радикально другой подход к имитации.
Все другие фреймворки имитации используют создание динамического типа, чтобы делать то же самое, что вы могли бы сделать в коде: экстрадировать и переопределить. В этом случае ручные и динамические макеты - это в основном одно и то же , потому что они полагаются на возможность расширения абстрактных типов.
TypeMock использует радикально другую технику, потому что использует (unmanaged). NET Profiling API для перехвата вызовов любого типа . Это намного сложнее реализовать, поэтому неудивительно, что это коммерческое предприятие.
В любом случае, TypeMock vs. остальной мир - старый и очень оживленный спор. Вот один из вариантов (обязательно прочтите также комментарии).
Спасибо за это. Это заставило меня задуматься. Я работаю над приложением, которое не было разработано для тестирования и в настоящее время не имеет модульных тестов. Я думаю, что окончательным решением будет его постепенная реструктуризация и использование Rhino Mocks. Я уже использовал кучи Rhino раньше, и это было здорово.
Я начал понимать, что решение «все включено», вероятно, является лучшим, то есть Rhino заставит реструктуризацию использовать полную инверсию управления, что приведет к хорошему дизайну.
Независимо от того, какой макет фреймворка я использую, мне было бы удобно, если бы я сам мог принимать хорошие дизайнерские решения, поскольку я проделал кучу такой работы раньше, но другие, работающие над кодом, раньше не проводили модульное тестирование, поэтому сценарий, который заставляет их использовать IoC, лучше.