2012-03-30 11 views
2

Я использую Pex и Moles для моего низкоуровневого модульного тестирования, но я также изучаю MSpec для проверки бизнес-логики и хотел бы использовать Moles для обеспечения согласованности. Проблема, я думаю, в том, что MSPec использует анонимные методы, поэтому нет способа применить атрибут HostType («Moles»). Например:Есть ли обходной путь для установки [HostType («Moles»)] при работе с анонимными методами в MSpec?

Because of =() => 
    employeeList = EmployeeManager.GetUsersByRoles(rolesToLoad); 

It should_return_a_list_of_employees =() => 
    employeeList.ShouldNotBeNull(); 

Я насмешливо поставщик ролей под названием внутри «GetUsersByRoles», и когда я пытаюсь запустить этот тест через MSpec, я получаю стандарт «Родинка требует испытаний, чтобы находиться в инструментальном процессе» ошибка , с инструкцией добавить [HostType («Moles») к моему методу тестирования. Есть ли способ обхода или другой вариант, доступный здесь?

Боковое примечание: я загрузил MSMSpec.tt и модифицировал его, чтобы включить атрибут в сгенерированный VSTests, но я хотел бы иметь возможность запускать тесты MSpec напрямую через своего собственного бегуна или TestDriven.net, чтобы я мог получить дружественный выход для BAS и владельцев бизнеса.

ответ

1

Обходной путь заключается в замене анонимного метода на то, что нет. Moling Mspec в принципе невозможен.

Родинки не способны обходить анонимные методы. Причина в том, что методы должны быть адресованными, чтобы их можно было отключить. Анонимные методы не являются неявно адресуемыми, поскольку они генерируются и ссылаются во время выполнения. Проще говоря, вы не можете назвать анонимный метод через класс, потому что это хорошо ... anonymous.

В руководстве Moles указано: «Моли могут использоваться для обхода любого .NET-метода, включая не виртуальные и статические методы в закрытых типах». Поэтому, действуя в предположении, что Мольс использует отражение для идентификации членов класса, это безопасная ставка. Все, что не может быть вызвано через делегат, действие или Func, не может быть обработано.

+0

Спасибо, Майк, это полезное объяснение. Мне нужно выяснить, есть ли какая-то смелая фреймворк, который будет легко использоваться как в тестах MSpec, так и на Pex/native VS. –

+0

Жаль, что Moles не работает с mspec. Кто-нибудь знает, сможет ли работать проект Microsoft Fakes в VS 2011 (включая функции кротов среди других)? – Alexis