Domanda

Sto usando Microsoft Fakes in alcuni test Unità su cui sto lavorando.La mia interfaccia sembra questa:

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

Una tipica implementazione di questo sembra:

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

Mi piacerebbe usare questa interfaccia con Microsoft Fakes, e generare uno stub per me.Il problema è che gli usi FORM FAKE è StubInterfaceNameHere<>, quindi nell'esempio precedente si finisce per cercare di fare qualcosa come StubISecuredItem<StubISecuredItem<StubISecuredItem<StubISecuredItem....

è possibile?Se è così, come posso usare i falsi in questo modo?

È stato utile?

Soluzione

Dopo qualche sperimentazione ho trovato una soluzione di lavoro anche se non è la più elegante.

Questo è il tuo codice regolare:

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

Nel progetto di test crei un'interfaccia di StubimpleMtation

public interface StubImplemtation : ISecuredItem<StubImplemtation> { }
.

Quindi nel test dell'unità puoi fare quanto segue:

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

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

È possibile saltare l'intero StubImplementation e utilizzare RegistryKey se non è un problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top