Не Интерфейсные зависимые Платформы Насмешки для C#

Я плохо знаком с насмешкой, таким образом, у меня могла бы быть она полностью неправильно здесь, но я полагаю, что большинство платформ насмешки является интерфейсным зависимым. К сожалению, большая часть нашего кода не использует интерфейс. Теперь на днях я видел платформу Насмешки в Java, который воспроизвел код байта class\object относительно не, называют его внутренние методы, но Вы могли все еще протестировать это, это называло эти методы.

Мой вопрос: .NET имеет какие-либо платформы насмешки, которые могут сделать подобную вещь? Я ищу что-то свободное, и я не хочу что-то, что требует, чтобы методы были виртуальными или абстрактными.

15
задан Chris G 19 July 2010 в 11:18
поделиться

4 ответа

Microsoft Research разработала для этого Moles, который является частью Pex, но может быть установлен независимо. И это бесплатно. На сайте есть хорошая вводная статья (pdf), которая объясняет, как издеваться над статическим методом. Потребуется некоторое время, прежде чем они дойдут до того, что вам нужно (страница 16, задание 3).

Здесь и здесь (канал 9) можно найти пример того, как заглушить DateTime.Now. Используя Moles, вы можете издеваться над чем угодно.

10
ответ дан 1 December 2019 в 02:54
поделиться

TypeMock Isolator может имитировать любой класс .NET, но это не бесплатно (или даже дешево). Я не уверен, как именно это работает, но дает тот же конечный результат.

Но большинство фреймворков имитатора не зависят исключительно от интерфейсов; они также должны иметь возможность обрабатывать конкретные классы, хотя они смогут переопределять только виртуальные или абстрактные методы.

8
ответ дан 1 December 2019 в 02:54
поделиться

Вы можете использовать классы вместо интерфейсов как с Moq , так и с Rhino.Mocks , но имитируемые методы должны быть виртуальными. Ответ Марка Рушакова на TypeMock правильный (+1).

Лучшим вариантом является рефакторинг существующего кода для обеспечения возможности его тестирования (что может занять время). Я бы рекомендовал прочитать Работа эффективно с устаревшим кодом Майкла Фезерса.

6
ответ дан 1 December 2019 в 02:54
поделиться

Многие мокинг-фреймворки .NET используют Castle Dynamic Proxy для создания моков во время выполнения. Следовательно, ограничение, позволяющее высмеивать только интерфейсные/виртуальные методы, пришло из Castle и, я думаю, уходит корнями в CLR. И MOQ, и RhinoMocks могут высмеивать виртуальные методы, что не хуже.

Как классы, так и интерфейсы могут быть проксировать, однако только виртуальные члены могут быть перехвачены.

Я бы посоветовал начать создавать абстрактные базы для тех классов, которые нужно высмеивать, и расширять конкретный класс. Затем абстрактную базу можно передавать и высмеивать. Это действительно упражнение по рефакторингу, которое не является слишком сложным.

1
ответ дан 1 December 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: