Любая альтернатива функции прокладки, предусмотренная в поддельной системе Microsoft?

Мне интересно, есть ли альтернативная lib для функции прокладки, предусмотренная в фальшивой среде Microsoft, поскольку она поддерживается только в окончательной версии?

Ответ 1

Насколько мне известно, есть три структуры, которые позволяют вам высмеивать не виртуальные методы и запечатанные классы, такие как Fakes 'Shims. Есть

Все они коммерческие, потому что они используют API профилирования, которое очень волосатое и плохо документировано, поэтому его кодирование - настоящая боль.

И для протокола, я все для подделок. Большая часть кода, над которым работают люди, является устаревшим кодом. Одно из правил рефакторинга Pragmatic Programmer - убедитесь, что у вас есть покрытие модульных тестов перед любым рефакторингом, чтобы избежать регрессии. Это делает подделки и подобные фреймворки очень полезными, особенно когда устаревший код не был написан для тестирования.

Ответ 2

Prig не был обновлен для работы с VS 2017, но Pose делает, и работает очень хорошо для того, для чего он мне нужен (базовое шиммирование Environment.UserName, DateTime.Now и тому подобное), и имеет действительно хороший интерфейс:

// Create shims. They only apply within this isolate block.
var dateTimeShim = Shim.Replace(() => DateTime.Now)
                       .With(() => new DateTime(2010, 1, 1));

var usernameShim = Shim.Replace(() => Environment.UserName)
                       .With(() => "john.wick");

// Shims are only active within an Isolate block - and you 
// have to pass all shims you want to be active.
PoseContext.Isolate(() =>
{
    // Run your test - shims are active at this point.
    RunTest();
}, dateTimeShim, usernameShim);

РЕДАКТИРОВАТЬ

Я должен отметить, что я получаю много ошибок при выполнении довольно простых тестов - действительно страшных ошибок, таких как "Common Language Runtime обнаружил недопустимую программу" и "JIT Compiler обнаружил внутреннее ограничение". так будьте бдительны.

Ответ 3

Альтернатива с открытым исходным кодом - Prig. MIT лицензирован и по-прежнему активен, но немного отстает от VS IDE

Ответ 4

Да и для подробного сравнения смотрите здесь:

Структура фреймов vs MS Fakes

Как вы узнаете из ответа Джима Купера, сборники Fake на самом деле плохо, и есть намного лучшие альтернативы, например. которые поддерживают рефакторинг и требуют меньше кода (используйте generics).