2016-12-08 2 views
1

Ich habe so etwas wie dies zu testen:Moqing UnitOfWork mit Lambda Expression

public void example(ModelView modelView) 
     { 
      //... 
      var statustId= 1; 
      var requests = _unitOfWork.RequestRepository.Get(m => m.RequestStatusId == statusId); 

      var requests = _unitOfWork.RequestRepository.Get(m => m.RequestTypeId == modelView.RequestTypeId); 

      var oldRequests = _unitOfWork.RequestRepository.Get(m => m.Created == DateTime.Now.AddDays(-7)); 
      //... 
     } 

Wie kann ich spotten alle „GET“ mit unterschiedlichen Daten?

Das ist, was ich bis jetzt bekommen habe: nicht sicher, wie der Ausdruck aussehen sollte, da er Variablen von der Funktion verwendet.

[Test] 
public void Test() 
{ 
    //Arrange 
    _requestGenericRepo.Setup(m => m.Get(
     It.Is<Expression<Func<Request, bool>>>(e => e.Equals(First GET - using local variable); 
    _requestGenericRepo.Setup(m => m.Get(
     It.Is<Expression<Func<Request, bool>>>(e => e.Equals(Second GET - using variable from modelView)); 
    _requestGenericRepo.Setup(m => m.Get(
     It.Is<Expression<Func<Request, bool>>>(e => e.Equals(Third GET)); 
    //Act 
    var response = _controller.Example(new ModelView 
    { 
     RequestTypeId= 1 
    }); 
    //Assert 
    ... 
} 

------------------- BEARBEITEN: ---------------------- ---------------------

Es wäre schön zu wissen, wie in der oben genannten Weise zu tun, aber ich kann alle Get( zu Get().Where wie folgt ändern:

public void example(ModelView modelView) 
     { 
      //... 
      var statustId= 1; 
      var requests = _unitOfWork.RequestRepository.Get().Where(m => m.RequestStatusId == statusId); 

      var requests = _unitOfWork.RequestRepository.Get().Where(m => m.RequestTypeId == modelView.RequestTypeId); 

      var oldRequests = _unitOfWork.RequestRepository.Get().Where(m => m.Created == DateTime.Now.AddDays(-7)); 
      //... 
     } 


[Test] 
public void Test() 
{ 
    //Arrange 
    _requestGenericRepo.Setup(m => m.Get(
     It.IsAny<Expression<Func<Request, bool>>>()); 

    //Act 
    var response = _controller.Example(new ModelView 
    { 
     RequestTypeId= 1 
    }); 
    //Assert 
    ... 
} 
+0

Sind jeder dieser Ausdrücke gehen bei dem Verfahren unter Test in der gleichen Anwendungsfall aufgerufen werden? – Nkosi

+0

@Nkosi Ja ... Ich bearbeite meine Frage, aber ich wäre nett zu wissen, ob es einen Weg gibt, es zum Laufen zu bringen – Valter

Antwort

1

Was ist der Rückgabewert der RequestRepository.Get-Methode? Sie können versuchen, SetupSequence zu verwenden und den Pfad auszuwählen, den Sie testen möchten. Etwas wie:

_requestGenericRepo.SetupSequence(m => m.Get(It.IsAny<Expression<Func<Request, bool>>>()) 
    .Returns(/*First call*/) 
    .Returns(/*Second call*/) 
    .Returns(/*Third call*/); 
+1

Danke für die Antwort – Valter