Как можно ссылаться на заглушку, которая имеет общий параметр, используя Microsoft Fakes?

StackOverflow https://stackoverflow.com//questions/12680378

Вопрос

Я использую Microsoft Fakes в некоторых модульных тестах, над которыми работаю.Мой интерфейс выглядит так:

interface ISecuredItem<TChildType> where TChildType : class, ISecuredItem<TChildType>
{
    SecurityDescriptor Descriptor { get; }
    IEnumerable<TChildType> Children { get; }
}

Типичная реализация этого выглядит так:

class RegistryKey : ISecuredItem<RegistryKey>
{
    public SecurityDescriptor Descriptor { get; private set; }
    public IEnumerable<RegistryKey> Children { get; }
}

Я хотел бы использовать этот интерфейс с Microsoft Fakes и создать для меня заглушку.Проблема в том, что форма, которую использует Fakes, StubInterfaceNameHere<>, поэтому в приведенном выше примере вы пытаетесь сделать что-то вроде StubISecuredItem<StubISecuredItem<StubISecuredItem<StubISecuredItem....

Это возможно?Если да, то как мне использовать Fakes таким образом?

Это было полезно?

Решение

После некоторых экспериментов я нашел рабочее решение, хотя оно и не самое элегантное.

Это ваш обычный код:

public interface ISecuredItem<TChildType>
    where TChildType : ISecuredItem<TChildType>
{
    SecurityDescriptor Descriptor { get; }
    IEnumerable<TChildType> Children { get; }
}

В своем тестовом проекте вы создаете интерфейс StubImplemtation.

public interface StubImplemtation : ISecuredItem<StubImplemtation> { }

Затем в модульном тесте вы можете сделать следующее:

var securedItemStub = new StubISecuredItem<StubImplemtation>
                          {
                              ChildrenGet = () => new List<StubImplemtation>(),
                              DescriptorGet = () => new SecurityDescriptor()
                          };

var children = securedItemStub.ChildrenGet();
var descriptor = securedItemStub.DescriptorGet();

Вы можете пропустить весь StubImplementation и использовать RegistryKey если это не проблема.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top