Abbiamo un progetto MVC4 con Entity Framework per l'archiviazione. Per i nostri test abbiamo recentemente iniziato ad usare l'autofocus ed è davvero fantastico.Ignora proprietà virtuali
Il nostro grafico modelli è molto profondo e di solito la creazione di un oggetto dal AutoFixture crea l'intero grafico: persona -> Team -> Dipartimenti -> Azienda -> Contratti -> .... ecc
Il problema con questo è tempo. La creazione dell'oggetto richiede fino a un secondo. E questo porta a test lenti.
Quello che mi ritrovo a fare un sacco è cose come questa:
var contract = fixture.Build<PersonContract>()
.Without(c => c.Person)
.Without(c => c.PersonContractTemplate)
.Without(c => c.Occupation)
.Without(c => c.EmploymentCompany)
.Create<PersonContract>();
E questo funziona ed è veloce. Ma questa sovra-specifica rende i test difficili da leggere e, a volte, perdo i dettagli importanti come .With(c => c.PersonId, 42)
nell'elenco dei numeri non importanti .Without()
.
Tutti questi oggetti ignorati sono proprietà di navigazione per Entity Framework e sono tutti virtuali.
C'è un modo globale per dire a AutoFixture di ignorare i membri virtuali?
Ho provato a generare ISpecimentBuilder
, ma senza fortuna:
public class IgnoreVirtualMembers : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
if (request.GetType().IsVirtual // ?? this does not exist)
{
return null;
}
}
}
io non riesco a trovare un modo per rilevare ISpecimenBuilder
quell'oggetto stiamo costruendo è un membro virtuale in un'altra classe. Probabilmente ISpecimenBuilder
questo non è il posto giusto per farlo. Altre idee?
Salvato il giorno. Tuttavia, almeno negli Stati Uniti, Customisations indica le personalizzazioni. :) –
Lo so, fastidioso z entra in tutte le * sazioni. Nel Regno Unito è scritto correttamente, con "s" -))) – trailmax
Questa è una soluzione fantastica. Sono stato in grado di abbandonare le lezioni nel mio progetto e usarle subito con Moq. Lavoro eccellente! – Halcyon