2016-04-06 21 views
4

yöntem çağrısı yöntemini doğrulayın mugkito ile bir yöntem içinde bir yöntem çağrısı doğrulamak için olup olmadığını doğrulamak için çalışıyorum?mockito yöntemi bir yöntem için

şöyle bir örnek verilebilir:

verify(mock,times(1)).delete(param); 

da benzeri iç yöntemini kontrol etmek için bir yol gibi var mı:

public delete(param) { 
    VideoService.deleteVideo(param); << i want to verify the call of this method 
    return etc.. 
} 

kontrol edebilirim silme eğer ile adlandırılır ( doğrulamak sahte, . Zaman (1)) silin (param) .VideoService.deleteVideo (param);

+0

gibi bir test yazabilir 'statik bir yöntem VideoService.deleteVideo' veya' bir örnek değişkeni VideoService' edilir mi? –

cevap

0

Sen casus kullanabilir

public class MyVideoService { 

    private VideoService videoService; 

    public MyVideoService(VideoService videoService) { 
    this.videoService = videoService; 
    } 

    public void delete(String param) { 
    videoService.deleteVideo(param); 
    } 
} 

public class VideoService { 
    public void deleteVideo(String param) { 
    } 
} 

şimdi MyVideoService kullanan bir nesneyi test etmek isterseniz. Örneğin.

public class ObjectThatUsesMyVideoService { 

    private MyVideoService myVideoService; 

    ObjectThatUsesMyVideoService(MyVideoService myVideoService) { 
    this.myVideoService = myVideoService; 
    } 

    public void deleteVideo(String param) { 
    myVideoService.delete(param); 
    } 
} 

Bu

public class MyVideoServiceTest { 

    @Test 
    public void delete(){ 
    // VideoService is just a mock 
    VideoService videoServiceMock = Mockito.mock(VideoService.class); 

    // Creating the real MyVideoService 
    MyVideoService myVideoService = new MyVideoService(videoServiceMock); 

    // Creating a spy proxy 
    MyVideoService myVideoServiceSpy = Mockito.spy(myVideoService); 

    ObjectThatUsesMyVideoService underTest = new ObjectThatUsesMyVideoService(myVideoServiceSpy); 

    underTest .deleteVideo("SomeValue"); 

    // Verify that myVideoService was invoked 
    Mockito.verify(myVideoServiceSpy, Mockito.times(1)).delete("SomeValue"); 

    // Verify that myVideoService invoked the VideoService 
    Mockito.verify(videoServiceMock, Mockito.times(1)).deleteVideo("SomeValue"); 
    } 
} 
+0

Ama bu nasıl çalışıyor. Bu şekilde, deleteVideo'nun orjinall sınıfında mı çağrıldığını asla bilmeyeceğim? Bu sadece problemi çözmeyecek ve gerçek durumumu test etmeyecek mi? – Tvt

+0

Sanırım ne test etmek istediğini bilmiyorum. Lütfen sorunuzu güncelleyin. –

+0

Sadece bu yazdığınız için sınıfınızın bir parçası olduğu kötü yazılmış kodu yeniden yazmanız için teşekkür ederiz! :) – Tvt

0

Bir sınıfı bildiğinizi varsayalım

class MyVideoService { 

final VideoService videoService; 

public MyVideoService(VideoService videoService) { 
    this.videoService = videoService; 
} 

public void delete(param) { 
    videoService.deleteVideo(param); 
} 
} 

Sonra alay

VideoService videoService = mock(VideoService.class); 

ile VIDEOSERVICE Ve bu alay örnekle MyVideoService oluşturmak, çağrı yöntemi, doğrulamak:

MyVideService myVideoService = new MyVideoService(videoService); 
myVideoService.delete (param); 
verify(videoService, times(1)).deleteVideo(param); 
+0

Yea bu ilk örnek mi gibi mi ama bu benim sorum değil .. VideoService.deletevideo (param) çağrıldığında silme çağrıldığında doğrulamak istiyorum bunun için bir yol var mı? – Tvt

+0

Üzgünüm, kodumda bir yazım hatası var. Son satır şu şekilde okunmalıdır: doğrulayın (videoService, times (1)) deleteVideo (param); Biz VideoService alay ve sonra MyVideoService.delete() çağrıldığında yönteminin çağrılıp çağrılmadığını doğrularız. – Lukichev

+0

Ancak yapıcınızın bunu yapmak için videoService'ye ihtiyacı yoksa ne olur? ve onu çok gürültülü bir şekilde bozmak ... Uygulamayı başka bir şekilde tasarlamış olsa da, uşağı al ve probarly çalış. – Tvt