Шиммирование с помощью Microsoft Fakes и статического универсального метода

Мне нужно проложить статический общий метод для модульного теста. Однако я не могу заставить Fakes создать объект прокладки. Кто-нибудь знает, как это сделать?

В частности, я хочу скрыть JsonConvert.DeserializeObject‹>() от Newtonsoft.


person Chris    schedule 19.07.2013    source источник


Ответы (1)


Для каждого ожидаемого типа возвращаемого значения зарегистрируйте делегат следующим образом:

С этим кодом в модульном тесте:

using (var context = ShimsContext.Create())
{
    ShimJsonConvert.DeserializeObjectOf1String<SomeJSonObject>(s => new SomeJSonObject() { Name = "Foo" });

    SomeJSonObject o = ConsoleApplication3.Program.Deserialize();
    Assert.IsNotNull(o);
    Assert.AreSame(o.Name, "Foo");
}

И этот тестируемый код:

return JsonConvert.DeserializeObject<SomeJSonObject>("");

Это работает, как и ожидалось для меня.

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

Другие перегрузки

Нравиться:

ShimJsonConvert.DeserializeObjectOf1String<SomeJSonObject>(s => new SomeJSonObject() { Name = "Foo" });
ShimJsonConvert.DeserializeObjectOf1StringJsonConverterArray((s, convertors) => new SomeJSonObject() {Name = "Bar"});
ShimJsonConvert.DeserializeObjectOf1StringJsonSerializerSettings((s, settings) => new SomeJSonObject() { Name = "Bar" });
person jessehouwing    schedule 19.07.2013
comment
Это сработало. Раньше я создавал модульные тесты, и мне приходилось использовать другие общие методы классов экземпляров. Я не нашел методов в intellisense. Я нашел эту статью: blogs.microsoft.co.il/blogs/erix99/archive/2012/08/09/. После использования упомянутого здесь обходного пути все сработало нормально. Не могли бы вы сказать мне, что сделка заключена с FakesDelegates? - person Chris; 20.07.2013
comment
На самом деле, это не работает. Я думал, что это так, но у меня была неправильная конфигурация. При переходе по коду выполняется фактический код, а не прокладка. - person Chris; 20.07.2013
comment
Я обновил немного больше информации. Если это все еще не работает, поделитесь кодом своего модульного теста. - person jessehouwing; 20.07.2013