6

IService gerektiren bir kurucu ile bir test sınıfım var.xUnit ile Bağımlılık Enjeksiyonu kullanmak mümkün mü?

public class ConsumerTests 
{ 
    private readonly IService _service; 
    public ConsumerTests(IService servie) 
    { 
     _service = service; 
    } 

    [Fact] 
    public void Should_() 
    { 
     //use _service 
    } 
} 

Ben test sınıfı inşa etmek seçim benim DI konteyner eklentisi istiyoruz.

Bu mümkün mü xUnit?

cevap

0

Neyi test etmeye çalışıyorsunuz? IService'un uygulanması veya DI kabının kablolaması? Eğer IService uygulamalarını test ediyorsanız

, sen testinde doğrudan örneklendirerek (ve herhangi bir bağımlılıkları alay) edilmelidir:

var service = new MyServiceImplementation(mockDependency1, mockDependency2, ...); 
// execute service and do your asserts, probably checking mocks 

DI kabın bağlantıların kontrolü çalışıyorsanız yapmanız gerekir Dışarıya yapılandırılmış konteynere ulaşın ve yakalayın. Size (sözde kod izler, AutoFac tür aromalı) için yapacak hayır "kompozisyon kök" ise: Eğer aynı nesneyi kullanmak gerekir nerede entegrasyon testleri çalıştırmak için xunit kullanıyorsanız

var myContainer = myCompositionRoot.GetContainer(); 
var service = myContainer.ResolveCompnent<IService>(); 
// execute service and do your asserts with the actual implementation 

Birden fazla test, Fikstür: http://xunit.github.io/docs/shared-context.html.

0

bu kaynak kodu dışında bu kullanarak Nuget paketi yapmanın bir yolu yoktur: Eğer [Fact] kullandıkça O büyük olduğu sürece çalışır https://github.com/dennisroche/xunit.ioc.autofac

ancak [Theory] kullanarak başlayınca o zaman engellenen. Bunu çözmek için bir çekme talebi var.

Kendimi engellemek için, Container'ı kapsayıcı ve kapsayıcıdan çıkarmak için CollectionFixture'u kullandım, Arabirimi çözüyorum.