2010-02-02 19 views
6

Bir saplama olarak tanımlamak zorunda kalmadan bir saplama/aldatmanın nesne üyesi çağrısıyla uğraşmak ve dönüş değerini tüm ayrı ayrıntılı çizgiler olarak ayarlamak mümkün mü?Can Rhino Daha derin/iç içe üyeler doğrudan mı?

Örnek:

[TestMethod] 
    public void AssignedPermissions_AssociateExists_ReturnsEdit_Rhino() 
    { 

     //Arrange 
     var fakeConfiguration = MockRepository.GenerateStub<IDomainControllerConfiguration>(); 
     var fakeAssociateRepository = MockRepository.GenerateStub<IAssociateRepository>(); 
     fakeConfiguration.Stub(x => x.AssociateRepository).Return(fakeAssociateRepository); 
     fakeAssociateRepository.Stub(x=>x.GetAssociatesByRole(null,false,null)).IgnoreArguments() 
      .Return(new IAssociate[]{MockRepository.GenerateStub<IAssociate>()}); 

     var domain = new DomainController(fakeConfiguration); 

     const AssignedPermission expected = AssignedPermission.Edit; 

     //Act 
     AssignedPermission actual = domain.AssignedPermissions(); 

     //Assert 
     Assert.AreEqual(expected, actual); 
    } 

tüm bu geçici değişkenler gerekli mi sadece iç içe yöntem çağrıları saplama için?

+0

Sen Demeter yasasını ihlal sonuçlarından biri karşılaştık: http://clintshank.javadevelopersjournal.com/long_unit_test_setup. htm –

+0

@wcoenen well .. konfigürasyon nesnesi, doğrudan arayanın içinden ne iş yapar düşünür müsün? En azından bu bir yuvalanma seviyesi önemli veya değerli görünüyor. Çoğunlukla sadece bir DTO – Maslow

+0

olduğu için, yapılandırma nesnesinde geçiş yöntemleri eklemeniz gerekmez. Neden sadece depo için bir kurucu argüman eklemiyorsunuz? yeni DomainController (fakeConfiguration, fakeRepository); ' –

cevap

3

Hiçbir zaman işlevselliği kullanmamıştım, bu yüzden bunun işe yarayacağından% 100 emin değilim, ancak teorik olarak Rhino alayları "recursive mocking" nu destekliyor, bu da böyle bir şey yaparak fakeAssociateRepository'yi en azından kesmenize izin vermeli :

var fakeConfiguration = MockRepository.GenerateStub<IDomainControllerConfiguration>(); 
fakeConfiguration.Stub(x => x.AssociateRepository.GetAssociatesByRole(null,false,null)) 
      .IgnoreArguments() 
      .Return(new IAssociate[]{MockRepository.GenerateStub<IAssociate>()}); 

var domain = new DomainController(fakeConfiguration); 

(not: kod test, hatta derlenmiş değil)