Существует ли альтернатива F/OSS Typemock Isolator .NET?
Открытый исходный код/бесплатная альтернатива Typemock Isolator
Ответы (5)
Отказ от ответственности: я работаю в Typemock
Typemock Isolator использует CLR Profiler API для перезаписи IL, что позволяет вам подделывать (имитировать) статические методы и конкретные классы. Насколько я знаю, Moles делает то же самое, что и Isolator, с точки зрения использования Profiler для имитации этих вещей, и это бесплатно (но не с открытым исходным кодом).
Все другие фреймворки с открытым исходным кодом, использующие Dynamic Proxy для реализации интерфейсов и абстрактных классов во время выполнения, поэтому они не могут имитировать запечатанные/статические классы.
Я не знаком со всеми функциями Typemock Isolator, но Moles — бесплатный продукт, который я использовал для модульного тестирования.
Я использовал Typemock в своем последнем проекте и очень им доволен. Я прошел через ту же боль, получив разрешение на покупку Typemock в моей организации из-за его стоимости. Но в итоге мы остались довольны покупкой.
Недавно я наткнулся на JustMock, разработанный Telerik. Он может имитировать почти все, как Typemock, а также дешевле, чем Typemock, что хорошо. Что еще лучше, у них есть урезанная версия продукта — JustMock Lite, которая бесплатна. Вы можете начать с бесплатной версии, а затем перейти на платную версию, если вам нужны расширенные функции, такие как имитация запечатанных классов, невиртуальные методы и т. д. Таким образом, вам не нужно менять свой код при обновлении для поддержки расширенных сценариев имитации. .
Кроме того, JustMock использует подход Dynamic Proxy для простых имитационных сценариев, таких как интерфейсы, виртуальные методы, и использует API профилирования .NET только для расширенных функций, что ускоряет выполнение модульных тестов для самых простых сценариев.
Я создал один — AutoFake. Таким образом, вы можете заменить все, что захотите, без необходимости платить деньги и иметь возможность получить быструю поддержку от сообщества открытого исходного кода. Вот краткий пример того, что вы можете сделать:
public class Calendar
{
public static DateTime Yesterday => DateTime.Now.AddDays(-1);
}
[Fact]
public void Yesterday_SomeDay_ThePrevDay()
{
var fake = new Fake<Calendar>();
var sut = fake.Rewrite(() => Calendar.Yesterday);
sut.Replace(() => DateTime.Now).Return(new DateTime(2016, 8, day: 8));
Assert.Equal(new DateTime(2016, 8, 7), sut.Execute());
}
Я использую мокирующую библиотеку Moq в своих тестах для имитации. Это полностью F/OSS (лицензия BSD).