2016-02-10 26 views
10
import static org.mockito.Mockito.atLeastOnce; 
import static org.mockito.Mockito.verify; 

import org.mockito.ArgumentCaptor; 
import org.mockito.Mockito; 


public class MockitoTest { 


    public static class TestMock { 
     public void doIt(String s) { 
     } 
    } 

    public static void main(String[] args) { 
     TestMock mock = Mockito.mock(TestMock.class); 
     mock.doIt("1"); 
     mock.doIt("2"); 

     ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class); 
     verify(mock, atLeastOnce()).doIt(argument.capture()); 
     System.out.println(argument.getValue()); 
     verify(mock, atLeastOnce()).doIt(argument.capture()); 
     System.out.println(argument.getValue()); 
    } 
} 

üzerinde birden çağırmaları doğrulayarak ben 1 2 yazdırmak için bu beklenen ama yerine 2 2 yazdırır. Görünüşe göre '1' çağrısı kayboldu. Doğrulamaların 1 ve ardından 2 ile olduğunu doğrulayabilmem için bir yolu var mı?mockito - ayrı ayrı aynı yöntemle

cevap

14

getValue() yerine ArgumentCaptor.getAllValues()'u arayabilirsiniz. Bu, yakalanan tüm değerleri döndürür:

Yakalanan tüm değerleri döndürür. Varargs yakalarken veya doğrulanmış yöntem birden çok kez çağrıldığında kullanın.

Bu durumda

, bir List<String>1 ve 2 içeren dönecektir.

Tartışmanın yakalanan değerini döndürür:

getValue() yöntem sadece son yakalanan değeri döndürür. sahte 2 kez çağrıldı beri yöntem birden çok kez çağrıldı ise

o zaman daha kesin times(2) ile atLeastOnce() yerine, son yakalanan değerini Kodunuzda

döndürür. Argümanları yakalamak için verify'a iki farklı çağrı yapmanız gerekmez: Mockito, tek bir çağrı ile sahte olarak gönderilen tüm argümanları yakalayabilecektir. getValues() den getAllValues() için

TestMock mock = Mockito.mock(TestMock.class); 
mock.doIt("1"); 
mock.doIt("2"); 

ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class); 
verify(mock, times(2)).doIt(argument.capture()); // verify that it was call 2 times and capture the values given 

System.out.println(argument.getAllValues()); 
2

geçin. Sahte üzerinde gerçekleştirdiği tüm görüntülerin bir listesini döndürecektir. Aslında sonunda gerekli Ne

ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class); 
verify(mock, atLeastOnce()).doIt(argument.capture()); 
System.out.println(argument.getAllValues().get(0)); 
verify(mock, atLeastOnce()).doIt(argument.capture()); 
System.out.println(argument.getAllValues().get(1)); 
1

aramaları kullanarak, artan doğrulama için de sipariş doğrulama idi() VerificationMode

public static class A { 

    public void a(int x) {} 

    public void b() {} 

} 

public static void main(String[] args) { 
    A a = mock(A.class); 
    a.b(); 
    a.a(1); 
    a.a(1); 
    a.a(2); 
    a.a(3); 
    a.a(4); 

    InOrder inOrder = Mockito.inOrder(a); 
    // Verifies [1,1] 
    inOrder.verify(a, calls(2)).a(1); 
    { 
     // Verifies [2] 
     ArgumentCaptor<Integer> argument = ArgumentCaptor.forClass(Integer.class); 
     inOrder.verify(a, calls(1)).a(argument.capture()); 
     System.out.println(argument.getAllValues()); 
    } 
    { 
     // Verifies [3,4] 
     ArgumentCaptor<Integer> argument = ArgumentCaptor.forClass(Integer.class); 
     inOrder.verify(a, calls(2)).a(argument.capture()); 
     System.out.println(argument.getAllValues()); 
    } 
} 
İlgili konular