2016-04-17 10 views
1

Ich habe den Code, unter dem ich testen möchte, aber ich bin mir nicht sicher, ob es möglich ist oder nicht.Wie verschachtelte Eigenschaften und Objekte und ihre Funktionen?

Ich habe EF-Repositories und sie werden zu einer Klasse als öffentliche Eigenschaften zusammengefügt. Ich weiß nicht genau, ob es eine schlechte Lösung ist oder nicht, aber es ist einfacher, den Code und seine Abhängigkeiten zu verwalten. Nur die Testbarkeit ist immer noch eine Frage.

Zweck meines Tests wird die Injektion von Daten über

administrationRepository.ModuleScreen.GetAll()

Verfahren und das Ergebnis fangen. Ich weiß, dass es getestet werden kann, sobald es bereitgestellt wird, aber ich möchte die Tests in Build-Zeit, um eine möglichst schnelle Rückmeldung zu erhalten.

Ich ging hier durch Fragen und Antworten, aber ich kann keine Antworten finden. In meinem Code bin ich an den Punkt gelangt, an dem die Eigenschaft eingerichtet wird, aber wenn ich den administrationRepoMock.Object.ModuleScreen.GetAll() aufruft, bietet ReSharper nur die Methoden an, die von Entity Framework kommen und nicht die Moq-bezogenen Funktionen.

Es ist möglich, was ich will? Wenn das so ist, wie? Ist mein Design dafür geeignet? Wenn nicht, kannst du mir Artikel geben, wo ich Beispiele sehen kann?

Repository:

public interface IModuleScreen 
{ 
    IEnumerable<DomainModel.Administration.ModuleScreen> GetAll(); 
} 

public interface IAdministrationRepository 
{ 
    IModuleScreen ModuleScreen { get; } 
} 

public partial class AdministrationRepository : IAdministrationRepository 
{ 
    public virtual IModuleScreen ModuleScreen { get; private set; } 

    public AdministrationRepository(IModuleScreen moduleScreen) 
    { 
     this.ModuleScreen = moduleScreen; 
    } 
} 

Anwendung:

public partial class DigitalLibraryApplication : IDigitalLibraryApplication 
{ 
    private IAdministrationRepository _administrationRepository; 
    private IMapper.IMapper.IMapper _mapper; 
    private IDiLibApplicationHelper _dilibApplicationHelper; 

    #region Ctor 
    public DigitalLibraryApplication(IAdministrationRepository administrationRepository, IMapper.IMapper.IMapper mapper, IDiLibApplicationHelper diLibApplicationHelper) 
    { 
     _administrationRepository = administrationRepository; 
     _mapper = mapper; 
     _dilibApplicationHelper = diLibApplicationHelper; 
    } 
    #endregion 

    public IEnumerable<ModuleScreenContract> GetModuleScreens() 
    { 
     //inject data here 
     IEnumerable<ModuleScreen> result = _administrationRepository.ModuleScreen.GetAll(); 

     List<ModuleScreenContract> mappedResult = _mapper.MapModuleScreenToModuleScreenContracts(result); 

     return mappedResult; 
    } 

} 

Prüfregeln:

[Test] 
public void ItCalls_ModuleRepository_Get_Method() 
{ 
    List<SayusiAndo.DiLib.DomainModel.Administration.ModuleScreen> queryResult = new List<SayusiAndo.DiLib.DomainModel.Administration.ModuleScreen>() 
    { 
     new DomainModel.Administration.ModuleScreen() 
     { 
      Id = 100, 
     }, 
    }; 

    var moduleScreenMock = new Mock<IModuleScreen>(); 
    moduleScreenMock.Setup(c => c.GetAll()).Returns(queryResult); 

    administrationRepoMock.SetupProperty(c => c.ModuleScreen, moduleScreenMock.Object); 


    var mapperMock = new Mock<IMapper.IMapper.IMapper>(); 
    var dilibApplicationHerlperMock = new Mock<IDiLibApplicationHelper>(); 


    IDigitalLibraryApplication app = new DigitalLibraryApplication(administrationRepoMock.Object, mapperMock.Object, dilibApplicationHerlperMock.Object); 

    app.GetModules(); 
    //issue is here 
    administrationRepoMock.Object.ModuleScreen.GetAll() //??? 
} 
+0

Durch Testen möchte ich wissen, dass meine Geschäftslogik mit den richtigen Daten zurückkehrt. Deshalb möchte ich das Repository mockern und seinen Rückgabewert kontrollieren und sehen, wie andere Teile des Codes funktionieren. – SayusiAndo

Antwort

2

Hier ist ein Refactoring Ihrer Test, der bei der Ausführung gelangt. Sie können die Passkriterien an die Definition eines erfolgreichen Tests anpassen.

Verwandte Themen