2013-06-17 11 views
6

Cześć, że mam metodę z następującym podpisem:Moq jak określić metodę nazwano z listą zawierającą pewne wartości

public void GeneratePaymentAdvise(IList<int> paymentIds) 

i nazywa się to w inny sposób:

public void UpdatePaymentStatus(IList<int> paymentIds, IPaymentLogic paymentLogic) 
{ 
... 
    paymentLogic.GeneratePaymentStatus(paymentIds); 
... 
} 

Tak w teście jednostkowym chcę się upewnić, że to się nazywa. Korzystanie MOQ:

var mockPaymentLogic = new Mock<PaymentLogic>(); 

UpdatePaymentStatus(new List<int> { 2, 3 }, mockPaymentLogic.Object); 

mockPaymentLogic.Verify(x => x.GeneratePaymentStatus(It.IsAny<IList<int>>()); 

Więc będzie to działać dobrze i kontrole, które GeneratePaymentStatus jest powołanych, ale tylko, że został wywołany z byle listy wskazówki.

Czy istnieje sposób na przepisanie tego, aby przetestować, że GeneratePaymentStatus został wywołany z listą ints zawierającą 2 i 3?

Odpowiedz

7

Coś takiego:

mockPaymentLogic.Verify(x => x.GeneratePaymentStatus(It.Is<IList<int>>(l => l.Contains(2) && l.Contains(3)))); 
0

Dlaczego nie można po prostu użyć tego samego int tablicę do weryfikacji.? Coś jak to ...

[TestClass] 
public class SomeClassTests 
{ 
    [TestMethod] 
    public void UpdatePaymentStatus_PaymentIds_VerifyPaymentLogicGeneratePaymentStatus() { 
     var mock = new Mock<IPaymentLogic>(); 
     var sut = new Sut(); 
     var idList = new List<int> {2, 3}; 

     sut.UpdatePaymentStatus(idList, mock.Object); 

     mock.Verify(x => x.GeneratePaymentStatus(idList)); 
    } 
} 

public class Sut { 
    public void UpdatePaymentStatus(IList<int> paymentIds, IPaymentLogic paymentLogic) { 
     paymentLogic.GeneratePaymentStatus(paymentIds); 
    } 
} 

public interface IPaymentLogic { 
    void GeneratePaymentStatus(IList<int> paymentIds); 
} 

Jeśli zweryfikujesz z inną listą niż idList, test zakończy się niepowodzeniem.