Comment faire référence à un stub qui possède un paramètre générique lui-même à l'aide de Microsoft Fakes ?

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

Question

J'utilise Microsoft Fakes dans certains tests unitaires sur lesquels je travaille.Mon interface ressemble à ceci :

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

Une implémentation typique de ceci ressemble à :

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

J'aimerais utiliser cette interface avec Microsoft Fakes et lui faire générer un stub pour moi.Le problème est que le formulaire utilisé par Fakes est StubInterfaceNameHere<>, donc dans l'exemple ci-dessus, vous finissez par essayer de faire quelque chose comme StubISecuredItem<StubISecuredItem<StubISecuredItem<StubISecuredItem....

Est-ce possible?Si oui, comment puis-je utiliser les Fakes de cette manière ?

Était-ce utile?

La solution

Après quelques expérimentations, j'ai trouvé une solution efficace même si ce n'est pas la plus élégante.

Voici votre code habituel :

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

Dans votre projet de test, vous créez une interface StubImmplemtation

public interface StubImplemtation : ISecuredItem<StubImplemtation> { }

Ensuite, dans votre test unitaire, vous pouvez effectuer les opérations suivantes :

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

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

Vous pouvez sauter tout StubImplementation et utilise RegistryKey si ce n'est pas un problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top