Jestem nowy w AutoFixture, więc nie wiem, czy poniższy pomysł będzie sensowny, czy rozsądny. Mam aplikację, która jest odpowiedzialna za test integracji , i to sprawia, że intensywne korzystanie z Castle Windsor. Aby uprościć zarządzanie zależnościami i sprawić, by moje testy bardziej przypominały kod aplikacji, budowałem kontener Windsor w mojej metodzie inicjowania testu i korzystałem z container.Resolve do tworzenia kodu, który testuję. Chciałbym odejść od tego podejścia, ponieważ ograniczyło to moją elastyczność w pewnych sytuacjach.Technika korzystania z AutoFixture do testowania integracji aplikacji korzystającej z Castle Windsor
Co chciałbym zrobić, to mieć testy, które wyglądają mniej więcej tak:
[Theory]
[Dependency]
public void TestWithDependencies(IThing thing)
{
thing.Hello();
}
aby tak się stało, mogę wykonać następujące czynności:
public sealed class DependencyAttribute : AutoDataAttribute
{
public DependencyAttribute()
: base(new Fixture().Customize(new WindsorCustomization()))
{
}
}
public class WindsorCustomization : ICustomization
{
public WindsorCustomization()
{
// build container here using SUT installers
}
public void Customize(IFixture fixture)
{
fixture.Inject<IThing>(new Thing());
}
}
Rozwiązanie to działa, ale to, czego chciałbym uniknąć, to kopiowanie każdego interfejsu do mapowania implementacji z kontenera Windsor na moduł IFIXture AutoFixture.
Welp! Po prostu rzuciłem okiem na kod dla AutoMoq i zobaczyłem dokładnie, jak robić to, co chcę robić. Mogę opublikować kod w odpowiedzi, jeśli ktoś jest zainteresowany. – thebeekeeper
Tak, to całkiem blisko do działania AutoMoqa :) –