2009-12-06 1 views
1

Рассмотрите эту идею о предстоящей реализации Iron Python..NET 4 делает для лучшего модульного тестирования/издевательств из-за способности патча обезьяны?

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

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

ответ

2

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

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

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

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

Если вы хотите обезьяны латания вам нужен правильный перехват и что трудно: Dynamic interception of calls in .NET

+0

Но если имена методов были такими же, безусловно, «фиктивная» реализация в IronPython будет использоваться, так что вы можете исправить существующий код ? Это все гипертекстовое, я еще не использовал .NET 4.0. – Finglas

+0

Если у вас есть контейнер (фабрика), который вы используете для создания экземпляра и используете его повсюду, чтобы получить новые экземпляры и подключите его, чтобы применить перехват, тогда да. Но для этого потребуется много работы. плюс с динамикой вы теряете intellisense и не можете поймать тривиальные опечатки во время компиляции –

Смежные вопросы