2015-05-11 15 views
5

Tôi biết rằng bạn chỉ có thể xác minh các phương thức void. Nhưng tôi thực sự tự hỏi tại sao. Mockito: Xác minh phương thức boolean (hoặc các loại khác)

Gần đây tôi đã tình cờ gặp một bài kiểm tra đơn vị nơi tôi thực sự cần xác minh rằng một cuộc gọi nhất định đã được thực hiện. Để chính xác, đó là "newFolder.mkdirs()". Các hành vi của phương pháp này là khá nhiều "voidy" theo ý kiến ​​của tôi. Nhưng với tư cách là một "tính năng", các nhà phát triển cung cấp chức năng này một kiểu trả về boolean để xem liệu hành động đó có thành công hay không.

Rất tốt, nhưng tôi không quan tâm nhiều đến điều đó trong bài kiểm tra của mình, nơi tôi vứt những cái ôm của mình xung quanh. Tôi chỉ muốn đảm bảo rằng cuộc gọi này đã được thực hiện, giống như tôi muốn đảm bảo rằng các cuộc gọi void quan trọng đã được thực hiện.

Hiện tại, có khả năng thực hiện điều đó không? Tôi khá mắc kẹt về điều này, thậm chí không thể tưởng tượng một cách giải quyết cho vấn đề nhỏ bé đó:/Ai đó có một ý tưởng ngắn, tốt?


Tôi đã hoàn toàn sai: Bạn có thể xác minh mọi thứ. Tôi đã thất lạc dấu ngoặc đơn.

tôi đã:

verify(newFolder.mkdirs()); 

tôi cần:

verify(newFolder).mkdirs(); 

Silly me;)

+0

Tôi không chắc chắn những gì vấn đề mà bạn đang phải đối mặt? Bạn có nghĩa là bạn muốn thử một cái gì đó như: 'when (mock.hasNextItem()). ThenAnswer (new Answer() { Câu trả lời đối tượng (InvocationOnMock invocation) { gọi = true; return item; }' Đây phương thức ' hasNextItem() 'trả về' boolean' –

Trả lời

2

tôi có thể đã hiểu lầm, nhưng nơi nào nó nói rằng bạn chỉ có thể xác minh phương pháp khoảng trống?

Ví dụ ...

import org.junit.Test; 
import static org.mockito.Mockito.*; 

public class VoidTest { 

    private interface TestClass { 
     boolean doStuff(String arg); 
    } 

    @Test 
    public void doIt() { 
     TestClass tc = mock(TestClass.class); 

     tc.doStuff("[SOMETHING]"); 

     verify(tc).doStuff("[SOMETHING]"); // OK 
     verify(tc).doStuff("[SOMETHING ELSE ]"); // BOOM! 
    } 
} 
+0

Giả sử bạn đúng, hay đúng hơn là tôi đã hoàn toàn sai. Điều tôi đã làm là "verify (newFolder.mkdirs());" thay vì "verify (newFolder) .mkdirs(); "-> Dấu ngoặc đơn: ( – BAER

Các vấn đề liên quan