CodeGym/Java Kursu/Modül 3/Nesnelerde Spesifik Davranışı Ortaya Çıkarma

Nesnelerde Spesifik Davranışı Ortaya Çıkarma

Mevcut

5.1 doğrulama() yöntemi

Sanal nesneler oluşturmaya ek olarak, genellikle başka bir ilginç görev ortaya çıkar - test edilen sınıfın doğru nesnelerin doğru yöntemlerini çağırdığından emin olmak. Ayrıca, doğru parametrelerle ve benzerleriyle gerekli sayıda aradı.

Bunun için Mockito'nun da biraz büyüsü var - bir yöntem ailesi Mockito.verify(…). Yöntem çağrısı denetimini belirleyen genel kural şudur:

Mockito.verify(an object).method name(parameter);

Örnek:

@ExtendWith(MockitoExtension.class)
class VerifyTest {
    @Mock
    List<String> mockList;

    @Test
    public void whenMockAnnotation() {
        //method call
        String name = mockList.get(10);

        // check if the method was called
        Mockito.verify(mockList).get(10);
    }
}

Yöntem çağrısı sırasında, nesne üzerinde 10 parametreli yöntemin çağrılması gerektiği verify()kuralını belirliyoruz .mockitoListget()

5.2 Arama sayısını kontrol eden bir doğrulama() yöntemi

Bazen daha karmaşık doğrulama senaryoları vardır. Örneğin, yalnızca yöntemin çağrıldığını değil, örneğin 3 kez çağrıldığını da kontrol etmeniz gerekir. Veya sizden bir döngü içinde çağrıldı ve bu nedenle N kez çağrılması gerekirdi.

Bunun yapılıp yapılamayacağını sormayacağız, hemen soracağız: Böyle bir kural nasıl yazılır? Ve yine, Mockito bizi yarı yolda bırakmıyor. Kural şu ​​şekilde belirtilebilir:

Mockito.verify(an object,quantity).method name(parameter);

Önemli! Miktar bir tür değil int, çeşitli kalıpları tanımlayabilen özel bir nesnedir. Yöntemin farklı sürümlerini hatırlıyor musunuz any()? Burada da aynı - çeşitli senaryolar oluşturabileceğiniz özel yöntemler var:

Yöntem Tanım
1 Asla() Yöntem asla çağrılmamalıdır
2 kez(n) n kez
3 en az(n) n veya daha fazla kez
4 en azından bir kere() 1 veya daha fazla kez
5 en fazla(n) n veya daha az kez
6 sadece() Yalnızca bir çağrı olmalı ve yalnızca bu yönteme

Örnek:

String name1 = mockList.get(1);  //method call
String name2 = mockList.get(2);  //method call
String name3 = mockList.get(3);  //method call

//check that the get() method was called 3 times
Mockito.verify(mockList, times(3)).get(anyInt());

Ayrıca, belirtilen yöntem çağrıları dışında, nesneye başka hiçbir başvuru yapılmamasını da zorunlu kılabilirsiniz . Bunun için bir kural vardır:

Mockito.verifyNoMoreInteractions(an object);

5.3 Yöntem çağrı sırası

Önceki kurallar, çağrı yöntemlerinin sırasını hiçbir şekilde düzenlememiştir. Kuralın sadece yerine getirilmesi gerekiyor ve o kadar. Ancak yöntem çağrılarının sırasının önemli olduğu durumlar vardır ve Mockito'nun bunun için de bir çözümü vardır.

Özel bir nesne kullanılarak katı bir yöntem çağrıları sırası belirtilebilir InOrder. İlk önce onu oluşturmanız gerekir:

InOrder inOrder = Mockito.inOrder(an object);

Ve sonra methodları çağırarak ona kurallar ekleyin verify().

Örnek:

List<String> mockedList = mock(MyList.class);
mockedList.size();
mockedList.add("a parameter");
mockedList.clear();

InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).size();
inOrder.verify(mockedList).add("a parameter");
inOrder.verify(mockedList).clear();

5.4 Mockito'da istisnaları kontrol etme

İstisnaların atılmış olması biraz farklı şekilde kontrol edilir. Bunu yapmak için yöntemi kullanın assertThrows(). Böyle bir kontrolün genel formatı şöyledir:

Assertions.assertThrows(exception.class, () -> an object.methodname());

Karmaşık bir şey yok.

Örnek:

@ExtendWith(MockitoExtension.class)
class ThenThrowTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation() {
        //set the behavior of the method (needed for demonstration purposes only)
        Mockito.when(mockList.size()).thenThrow(IllegalStateException.class);

        //check if an IllegalStateException will be thrown when calling the size method
        assertThrows(IllegalStateException.class, () -> mockList.size());
    }
}
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok