2013-06-25 28 views
5

Yapıcıya enjekte edilen bir (Nsubstitute aracılığıyla) sınıfına erişmeye çalışıyorum. Aşağıdaki kodu sut başarıyla oluşturulduktanOtomatik Düzeltme + NSubstitute: Sahte donma?

var fixture = new Fixture() 
    .Customize(new AutoNSubstituteCustomization()); 

var sut = fixture.Create<MyService>(); 

ve adı verilen bir arayüzün bir alay versiyonunu kullanıyordum

"IFileUtils" "MyService" nin yapıcı enjekte edilir.

ama inanıyorum okuduktan sonra ben çok

var fileUtilMock= fixture.Freeze<Mock<IFileUtils>>(); 

Ama inanıyorum bu kod "Mock" gibi bir Moq sözdizimi gibi bu bilgilere erişimi var ve bu yüzden nesne dondurmak gerekir bu yüzden, bu bilgilere erişimi gerek bulunamadı

Normalde

var fileUtilMock= Substitute.For<IFileUtils>(); 

ama tabii bu yüzden onun kullanılmış ve yapıcı içine enjekte değil donmamış aşağıdaki yapmanız bir sınıfın bir Nsubstitute oluşturun.

Herkes yardımcı olabilir mi?

cevap

10

this Mocking tools comparison article by Richard Banks gelen çıkarımlara dayanarak, ve AutoMoq nasıl çalıştığını, inanıyorum:

  • NSubstitute Mock MOQ gibi Mock.Object yapar
  • A AutoFixture.Auto * uzantıları kanca arasında bir ayrılık yoktur [alaycı] arayüzlerin uygulanmasını sağlamak için SpecimenBuilderNode numaralı telefondanfixture.Create<IFileUtils>()
  • Freeze çalışması gerekir Bu nedenle sadece söylemek mümkün olmalıdır bir var result = fixture.Create<IFileUtils>(); fixture.Inject(result)

eşdeğerdir:

var fileUtilMock = fixture.Freeze<IFileUtils>(); 
+0

@daniel hilgarth benim çıkarımlarımdan herhangi biri iyi: D İstediğiniz kadar düzenlemekte özgürsünüz ve/veya yazıyı silmemi söyle! –

6

MyService örneğini oluşturmadan önce otomatik ataşmanlı örnek için Freeze dondurmalısınız.

Güncelleme: Ruben Bartelink olarak

NSubstitute ile yapmanız gereken tek şey, işaret:

var fixture = new Fixture() 
    .Customize(new AutoNSubstituteCustomization()); 

var substitute = fixture.Freeze<IFileUtils>(); 

..ve sonra NSubstitute uzantısı yöntemleri kullanın.

Bu şekilde, aynı, donmuş, örnek MyService yapıcısına sağlanacaktır.

Örnek: bir arayüz IInterface için

:

public interface IInterface 
{ 
    object MakeIt(object obj); 
} 

sizinle yapmanız gereken ise:

var substitute = fixture.Freeze<IInterface>(); 
substitute.MakeIt(dummy).Returns(null); 

Returns aslında NSubstitute bir uzantısı yöntemidir.

+0

Ama inanıyorum bu ben NSubstitute kullanıyorum, Adedi içindir ve Mock - Mock bulunamadı veya var .. – Martin

+0

Siz haklısınız. Cevabı yeni güncelledim. –

İlgili konular