.NET 4 делает для лучшего юнит-тестирования / пересмешки из-за способности к обезьяньему патчу? - PullRequest
2 голосов
/ 06 декабря 2009

Рассмотрим вопрос о предстоящей реализации Iron Python .

Теоретически это позволило бы исправление обезьян, верно? Хорошо это или плохо, это не имеет значения. Учитывая чей-то не тестируемый код (по крайней мере, легко), динамическое ключевое слово позволило бы мартышке патчить не так ли? Это имеет большой потенциал для C # и VB, если я правильно читаю.

Какие мысли по этому поводу?

1 Ответ

3 голосов
/ 06 декабря 2009

Поддержка динамического типа в .Net 4 на самом деле не дает вам полной поддержки исправления обезьян в системе типов CLR. Это дает вам еще один способ издеваться над объектами, но, честно говоря, нынешний способ вполне хорош (см. Moq: http://code.google.com/p/moq/)

С динамическими типами вы теряете intellisense, поэтому можно привести аргумент, что он не рекомендуется динамическому для насмешек.

Перехват в стиле IronPython позволит вам обернуть существующий объект вашим собственным желаемым поведением, но не позволит вам сообщить каркасу, чтобы пропатчить все объекты Foo (начиная с этого момента), поэтому метод Bar будет вызывать Bar2 вместо бара.

Имейте в виду, что в IronRuby и IronPython есть две отдельные системы типов, есть базовая система типов CLR и система типов IronRuby / IronPython, когда они обращаются к коду C #, происходит маршалинг. Таким образом, даже несмотря на то, что IronRuby / IronPython могут корректно исправлять свою собственную систему типов, они не могут использовать тот же механизм для исправления системы типов CLR.

Если вы хотите патчить обезьяну, вам нужен правильный перехват, а это hard : Динамический перехват вызовов в .NET

...