Я в процессе преобразования наших модульных тестов от Moles до новых подделок VS 2012. Несколько наших модульных тестов «поддельные» RNGCryptoServiceProvider
. Мы смогли «отмотать» это, но, похоже, для него не создано Shim для подделок. Другими словами, я ожидал бы найти ShimRNGCryptoServiceProvider.Не может показаться Fake RNGCryptoServiceProvider
Еще более интересным аспектом является то, что я нашел электронную книгу онлайн под названием «Лучшее тестирование единицы с помощью Microsoft Fakes». Там они показывают пример фальсификации функции Random. Вот пример.
System.Fakes.ShimRandom.Constructor = (real) => { };
System.Fakes.ShimRandom.AllInstances.NextDouble = this.NextDouble;
System.Fakes.ShimRandom.AllInstances.NextInt32Int32 = this.NextInt32Int32;
private int NextInt32Int32(Random random, int i, int arg3)
{
return (i + arg3)/2;
}
Я даже не вижу System.Fakes.ShimRandom в моем проекте. Только два Шины Я вижу для System.Fakes
is ShimDateTime
и ShimGuid
.
- Я создал сборку Подделки для системы (которая дала мне mscorlib.4.0.0.0.Fakes и System.4.0.0.0.Fakes)
- Я не изменил файлы конфигурации (mscorlib.fakes и системы. подделки)
- У меня есть проект моих подделок, чтобы построить платформу «Любой процессор».
- Мы используем .Net Framework 4.5 и VS 2012 Ultimate.
Я вижу кучу окурков, в том числе и System.Fakes.StubRandom
System.Fakes.StubRandomNumberGenerator
, но Столбики не будут работать для меня, потому что у меня нет никакого способа их инжекции в код тестируемого.
- Любая идея, почему я не получаю ShimRandom, когда кажется, что я должен быть, так как есть пример этого в eBook?
- Как мне «подделать»
RNGCryptoServiceProvider
?
'RNGCryptoServiceProvider' является' запечатаны class'. Это конкретная реализация, которую вы не можете изменить. Вероятно, вы должны начать с попытки подделать свой базовый класс, более общий ['RandomNumberGenerator'] (http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator (v = vs.110) .aspx). –
Кроме того, вы упомянули, что заглушка не будет работать, потому что вы не можете ее вводить. Вероятно, вам следует сказать, что либо вы не должны писать этот тест, либо вам следует вводить зависимость. – Magus