Czy można sfałszować wywołanie członu obiektu pośredniczącego/makiety bez konieczności definiowania tego jako kodu pośredniczącego, a także ustawić wartość zwracaną jako wszystkie oddzielne szczegółowe wiersze?Czy Rhino Mock może zagłębić się/zagnieździć członków bezpośrednio?
Przykład:
[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);
}
Czy wszystkie te zmienne tymczasowe konieczne tylko skrótową z zagnieżdżonych wywołań metod?
pan napotkasz jeden z konsekwencjami naruszania prawa Demeter: http://clintshank.javadevelopersjournal.com/long_unit_test_setup. htm –
@wcoenen well .. obiekt konfiguracyjny nie powinien tak naprawdę obsługiwać bezpośrednio tego, co w nim jest czy bym myślał? Przynajmniej ten jeden poziom zagnieżdżania wydaje się ważny lub cenny. ponieważ jest to głównie tylko bezczynne narzędzie DTO – Maslow
Nie musisz koniecznie dodawać metod tranzytowych do obiektu konfiguracji. Dlaczego nie dodać argumentu konstruktora dla repozytorium? 'nowy DomainController (fakeConfiguration, fakeRepository);' –