Есть ли какой-нибудь фреймворк с открытым исходным кодом, напоминающий TypeMock?

TypeMock слишком дорог для такого любителя, как я :)

Moq или следующая версия RhinoMocks не планирует прослушивать API профилирования, почему?

РЕДАКТИРОВАТЬ: Это включает такие функции, как:

  • Насмешка над не виртуальными методами и свойствами (!).
  • Имитация окружения браузера.
  • более простой синтаксис, который менее хрупок (и не должен проходить через фиктивные объекты).
  • Имитация статических методов Иногда полезно (в основном в устаревших сценариях, связанных с ужасным DateTime.Now).
  • И больше..

person gkdm    schedule 07.10.2009    source источник
comment
пожалуйста, выскажите, что вам нужно... иначе это не настоящий вопрос   -  person Mauricio Scheffer    schedule 08.10.2009
comment
Я должен сказать, что этот вопрос сформулирован как реклама, а не как вопрос. Я отвечу, почему TypeMock, скорее всего, является излишним, чтобы противодействовать этому.   -  person Anderson Imes    schedule 09.10.2009
comment
Мне это не кажется рекламой, звучит так, будто кто-то ищет альтернативу платному продукту в виде OSS. Если это реклама, то, возможно, худшая, которую я когда-либо видел, в основном говоря, что этот продукт стоит слишком дорого!   -  person dbr    schedule 09.10.2009
comment
The And more... со ссылкой на веб-сайт Isolator прямо под списком функций TypeMock (по общему признанию, уникальных)? Это похоже на рекламу... извините, если вы не согласны.   -  person Anderson Imes    schedule 09.10.2009
comment
TypeMock стоит абсурдно (800–1200 долларов за разработчика!).   -  person gkdm    schedule 10.10.2009
comment
@anderson-imes мы не рекламируем так. Как сказал @gkdm, это хромает как реклама. Посмотрите, сколько людей увидели этот вопрос: ~ 130, возможно, есть лучшие способы рекламы и охвата большего количества людей.   -  person Ohad Horesh    schedule 23.10.2009
comment
@ohad: просто сказал, что это похоже на рекламу, а не на то, что она была хорошей. Мне нравится ваш продукт (фактически я рекомендовал его покупку своей компании!). Мой ответ был просто для того, чтобы проиллюстрировать, почему группа с открытым исходным кодом, скорее всего, не будет пытаться создать что-то настолько продвинутое, как Type Mock, просто потому, что для них нет соотношения затрат и выгод. Большинство библиотек с открытым исходным кодом предполагают зеленое поле, и это не то, для чего предназначен Isolator.   -  person Anderson Imes    schedule 23.10.2009
comment
@AndersonImes Ваше предположение о соотношении затрат и выгод для разработчиков с открытым исходным кодом, создающих такой инструмент, как Type Mock, было неверным. Я могу сказать это, потому что я являюсь разработчиком OSS, который создал такой инструмент, правда, для Java, а не для .NET. И моя первоначальная мотивация была просто потому, что я хотел написать изолированные модульные тесты для объектно-ориентированного кода Java, но существующие инструменты имитации не позволяли мне это сделать.   -  person Rogério    schedule 25.07.2015


Ответы (8)


TypeMock слишком дорог для такого любителя, как я

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

person Jeff Hornby    schedule 09.10.2009

Деклаймер Я работаю в Typemock.

Я постараюсь ответить на ваши вопросы:

Есть ли какой-нибудь фреймворк с открытым исходным кодом, напоминающий TypeMock?

Единственная другая платформа, использующая API-интерфейс профилировщика, — это (коммерческая) JustMock.

Moq или следующая версия RhinoMocks не планирует прослушивать API профилирования, почему?

Думаю, дело в идеологии. Айенде, над которым издевается создатель Rhino, и Kzu, создатель moq, верит в удобство тестирования и в то, что фиктивная среда должна помочь вам реализовать этот дизайн, поэтому они не будут реализовывать функции Isolator, даже если это было легко.

TypeMock слишком дорог для такого любителя, как я

Если вы работаете из дома, вы можете купить более дешевую личную лицензию (я не хочу размещать здесь ссылку на страницу покупки Isolator, но я уверен, что вы сможете ее найти).

Надеюсь, поможет.

person Ohad Horesh    schedule 11.10.2009
comment
Я не думаю, что это вопрос идеологии, а чисто техническая сложность. На самом деле Айенде сказал, что примет патч, добавляющий поддержку имитации статических методов: to-Rhino-Mocks.aspx" rel="nofollow noreferrer">ayende.com/Blog/archive/2008/05/20/ - person Rogério; 13.02.2010

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

person TrueWill    schedule 07.10.2009
comment
Слишком беден, чтобы работать над O/S :) (шучу). Вопрос из любопытства. - person gkdm; 08.10.2009
comment
Не очень хорошая идея, поскольку теперь, когда кто-либо загружает ваш исходный код, он не может запускать ваши тесты без действующей лицензии. - person sjdirect; 27.01.2015

Moq или следующая версия RhinoMocks не планирует прослушивать API профилирования, почему?

Потому что это очень, очень сложно и требует некоторого знания C++. ?

person Graviton    schedule 08.10.2009
comment
Попробуйте, и вы узнаете - это недокументированный, очень неумолимый API для работы. - person Dror Helper; 11.10.2009
comment
@gkdm- посмотрите здесь- msdn.microsoft.com/en-us/ журнал/cc188743.aspx - person RichardOD; 03.03.2010

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

Короче говоря, TypeMock полезен для программистов, которые:

  • не имеет большого опыта работы с TDD и не понимает, как писать код для тестируемости
  • есть много устаревшего кода, к которому нужно привязать тестовые приспособления

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

person Anderson Imes    schedule 09.10.2009
comment
Я не согласен, я думаю, что невиртуальные методы имеют место в системах, построенных с использованием TDD с нуля. Это то, что беспокоит меня больше всего, это значительно влияет на мой дизайн. Также TypeMock имеет синтаксис с меньшими церемониями, что важно для модульного тестирования. - person gkdm; 10.10.2009
comment
Нет никаких причин, по которым вы не можете использовать интерфейс, чтобы избежать использования виртуальных методов. С точки зрения церемонии, я не вижу, насколько TypeMock проще в использовании, чем, скажем, Moq. - person Anderson Imes; 10.10.2009
comment
Правильно - если вы не используете какие-либо сторонние компоненты и у вас есть зеленое поле, вам не нужно использовать Typemock Isolator ... или вам нужно? - person Dror Helper; 11.10.2009
comment
Как вы думаете, должны ли сущности иметь интерфейс (IInvoice)? - person gkdm; 14.10.2009
comment
Я думаю, что если вам нужно издеваться над сущностью, ваши сущности не разработаны с правильным разделением задач. Нет причин издеваться над сущностью. Если да, то это не сущность. - person Anderson Imes; 14.10.2009
comment
TypeMock полезен, даже если вы строили без учета тестируемости. - person Judah Gabriel Himango; 23.10.2009
comment
Конечно, но если вы строите для тестируемости, затраты в размере 800–1200 долларов оправдать труднее. - person Anderson Imes; 23.10.2009
comment
Этот аргумент совершенно ложен, и можно доказать, что это так. Например, рассмотрим шаблон проектирования «Метод шаблона» (из книги GoF): он предписывает базовый класс (а не интерфейс), где метод шаблона всегда должен быть непереопределяемым (по причинам, которые должны быть очевидны, я надеюсь, если кто-то вообще схему понимает). И поскольку вам может понадобиться имитировать такой метод в тесте для клиентского класса, логически следует, что хороший инструмент для имитации должен позволять его имитировать. - person Rogério; 13.02.2010
comment
@Rogerio: непереопределяемые методы нельзя проверить. Я понимаю шаблон и почему вы должны его использовать, но создание базового класса таким образом, чтобы не допустить частичного издевательства над подклассами, невозможно проверить. Это не значит, что книга GoF неверна... Я сам довольно часто использовал этот шаблон. Я просто уверен, что это можно проверить. Если изоляция, которую вы чувствуете, когда эти методы непереопределяемы, особенно важна для вас, то, возможно, Isolator — это продукт для вас (и я никогда не говорил, что это плохой продукт... у него есть свое применение). - person Anderson Imes; 15.02.2010
comment
@Rogerio: существует множество других шаблонов GoF, которые удовлетворят ваши требования при использовании шаблона шаблона, но также могут быть протестированы. На ум приходит Стратегический паттерн. Все сводится к тому, хотите ли вы разработать дизайн для тестируемости (этот пункт также делает лучший ответ на этот вопрос). - person Anderson Imes; 15.02.2010
comment
@Андерсон, дело в том, что непереопределяемые методы МОГУТ быть проверены. В этом вся моя суть. Вам не нужно жертвовать хорошим дизайном (например, правильной реализацией шаблонного метода) из-за ограничений конкретных инструментов тестирования. Я хочу сказать, что вся эта идея дизайна для тестируемости шатка (за исключением случаев, когда предполагается, что тестируемость равна ремонтопригодности - и в этом случае я согласен). - person Rogério; 17.02.2010
comment
@Rogerio: я думаю, что правильная тестируемость ведет к ремонтопригодности, и я никогда не чувствовал, что должен жертвовать дизайном ради этого. Это приводит меня к тому, что одни шаблоны превосходят другие, но дизайн всегда здравый. Я мог бы не выбирать шаблонный метод, а реализовывать стратегии. Это не неправильно, это просто другой подход к той же цели. Я предпочитаю иметь явные интерфейсы или контракты в точках соприкосновения, в то время как другие, такие как вы, предпочитают отношения типа OO/Is-A с вещами. Ни один из них не является неправильным, я просто предпочитаю свой, и это позволяет мне использовать свободное программное обеспечение. - person Anderson Imes; 17.02.2010
comment
@Rogerio: такие продукты, как ваш и Isolator, найдут свое место, если вам нужна максимальная гибкость. Я использовал и любил Isolator и даже начал с него, но когда мои тесты вышли из-под контроля, я остановился, потому что я не нашел их очень удобными в сопровождении (я думаю, это то, к чему вы стремились). По иронии судьбы, книга Роя Ошерова действительно помогла мне преодолеть горб при тестировании, и я действительно чувствую, что теперь понимаю ее и не чувствую, что мне нужен такой уровень гибкости. Я действительно уважаю эти продукты... требуется много изобретательности, чтобы сделать их такими же полезными, как они есть. - person Anderson Imes; 17.02.2010
comment
@Андерсон, спасибо за хорошие комментарии. (Кстати, JMockit бесплатный и с открытым исходным кодом, если есть какие-то сомнения.) Я думаю, все сводится к тому, как каждый разработчик смотрит на дизайн. Соображения, которые привели меня к созданию JMockit, заключались, в основном, в том, что я хотел сохранить в производственном коде определенные желательные (для меня) свойства дизайна, но существующие инструменты имитации вынудили бы меня отказаться от них. По-видимому, некоторые или все эти свойства нежелательны для других разработчиков. Кто прав, а кто виноват? Возможно, мы никогда не узнаем, а может быть, у нас все в порядке. - person Rogério; 17.02.2010
comment
Давайте все согласимся, что мы все неправы. - person gkdm; 28.03.2010
comment
@gkdm: Обычно это относится к этому бизнесу. Я думаю, именно поэтому он мне так нравится. Я чувствую, что комментарии здесь расширили мой первоначальный ответ, чтобы понять, откуда исходит моя позиция, поэтому я оставлю свой ответ в силе. Даже если это не популярно, я все еще чувствую, что это правильный ответ. - person Anderson Imes; 30.03.2010

Проверьте http://beanproxy.codeplex.com/ . Это инструмент, который я разрабатывал в течение некоторого времени. Он еще не поддерживает невиртуальные прокси (кроме абстрактных и интерфейсов) и не поддерживает живые объекты (проксирование живых объектов). Тем не менее, это бесплатно и с открытым исходным кодом. Он очень прост в использовании и все еще разрабатывается (планируется поддерживать не виртуальные и живые объекты).

person payo    schedule 02.12.2009
comment
Как вы планируете этого добиться? - person gkdm; 05.12.2009

gkdm спросил меня, как я планирую добавить поддержку прокси на http://beanproxy.codeplex.com/ для статических и живые объекты, мой ответ, что я понятия не имею, как это сделать. Я изучал различные идеи; ничего из этого не получилось. Ближайшим решением, которое у меня было, было создание библиотеки профилирования, но это потребовало бы, чтобы тестировщик запускал мою библиотеку в качестве профилировщика, и он не смог бы просто запустить мою библиотеку со своими тестами. Я целыми днями читал и тестировал идеи, ничего не получалось. Я отказался от этого поиска, но снова буду открыт для идей, если у кого-то они есть. Beanproxy по-прежнему является отличным инструментом, который используют многие коллеги-разработчики. Используйте вкладки проблем и обсуждений на codeplex, если у вас есть какие-либо особые потребности или опасения по поводу beanproxy. Я всегда ищу, чтобы улучшить его.

person user261628    schedule 29.01.2010
comment
Ну и с C# 5.0 планируют открыть компилятор для расширений, думаю это поможет. РЕДАКТИРОВАТЬ: Может быть, они также будут так любезны, чтобы добавить достойный механизм перехвата. - person gkdm; 30.03.2010

Я понимаю, что этот вопрос относится к миру .NET, но если кому-то интересно, что существует в мире Java, я могу сказать, что ответ будет «да, есть».

Набор инструментов JMockit имеет открытый исходный код (лицензия MIT), и если я что-то не упустил, мощнее, чем TypeMock. (В частности, я не вижу в TypeMock ничего, что было бы эквивалентно функциональности, предоставляемой через аннотацию @Capturing в JMockit.)

person Rogério    schedule 13.02.2010