Mamy projekt MVC4 z Entity Framework do przechowywania. Na potrzeby naszych testów niedawno zaczęliśmy używać Autofixture i jest naprawdę świetny.Ignoruj właściwości wirtualne
Nasze modele wykres jest bardzo głęboka i zwykle tworząc jeden obiekt przez AutoFixture tworzy cały wykres: Person -> Team -> Wydziały -> Firma -> Usługi -> .... itp
Problem z tym jest czas. Tworzenie obiektów zajmuje do jednej sekundy. A to prowadzi do powolnych testów.
Co ja znajduję się robi wiele jest rzeczy tak:
var contract = fixture.Build<PersonContract>()
.Without(c => c.Person)
.Without(c => c.PersonContractTemplate)
.Without(c => c.Occupation)
.Without(c => c.EmploymentCompany)
.Create<PersonContract>();
I to działa i jest szybki. Ale ta nadmierna specyfikacja sprawia, że testy są trudne do odczytania i czasami tracę ważne informacje, takie jak .With(c => c.PersonId, 42)
na liście nieistotnych .Without()
.
Wszystkie te ignorowane obiekty są właściwościami nawigacyjnymi dla Entity Framework i wszystkie są wirtualne.
Czy istnieje ogólnoświatowy sposób powiadamiania AutoFixture o ignorowaniu wirtualnych członków?
Próbowałem tworzenia ISpecimentBuilder
, ale bez powodzenia:
public class IgnoreVirtualMembers : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
if (request.GetType().IsVirtual // ?? this does not exist)
{
return null;
}
}
}
I nie wydają się znaleźć sposób, aby wykryć w ISpecimenBuilder
tego obiektu budujemy jest członkiem wirtualny w innej klasie. Prawdopodobnie ISpecimenBuilder
to nie jest właściwe miejsce, aby to zrobić. Jakieś inne pomysły?
Uratowałem dzień. Jednak przynajmniej w Stanach Zjednoczonych w Customisations pisane są Dostosowania. :) –
Wiem, pesky z dostaje się do wszystkich * sations. W Wielkiej Brytanii jest napisane poprawnie, z "s" -))) – trailmax
To fantastyczne rozwiązanie. Udało mi się przenieść zajęcia do mojego projektu i od razu wykorzystać je z Moq. Świetna robota! – Halcyon