2010-09-11 31 views
6

Hãy nói rằng tôi có một lớpĐây có phải là trường hợp phù hợp với điệp viên Mockito không?

class SomeClass 
{ 
    public void methodA() 
    {} 

    public void methodB() 
    {} 

    public void someMethod() 
    { 
    methodA(); 
    methodB(); 
    } 
} 

Tôi muốn kiểm tra hành vi của someMethod() với Mockito.

Cách duy nhất tôi có thể nghĩ là sử dụng spy();

Something như

SomeClass someClass = spy(new SomeClass()); 
someClass.someMethod(); 
InOrder inOrder = inOrder(someClass); 
inOrder.verify(someClass).methodA(); 
inOrder.verify(someClass).methodB(); 

Tôi mới đến Mockito và tài liệu nói

"gián điệp Bất động nên được sử dụng một cách cẩn thận và đôi khi, ví dụ như khi đối phó với mã di sản." Vì vậy, có lẽ tôi đang thiếu một cái gì đó và có cách tốt hơn (phải) để xác minh rằng methodA và methodB được gọi mà không cần gọi chúng một cách rõ ràng trong trường hợp thử nghiệm.

Cảm ơn.

Trả lời

6

Có, spy() phù hợp với mục đích của bạn. Cảnh báo là do thực tế là các phương thức thực được gọi, và do đó bạn có thể nhận được các kết quả không mong muốn (ví dụ - tiền thực bị rút từ tài khoản ngân hàng)

-1

Nếu mã của bạn cần gián điệp để kiểm tra đơn vị. Spy là dấu hiệu đầu tiên của một mùi mã. Bạn có hai tùy chọn để tránh nó trong ví dụ của bạn:

  1. Bạn có thể tránh chế nhạo một trong các phương pháp và kiểm tra toàn bộ một sốPhương pháp.
  2. Nếu phương phápA và phương pháp B thực sự cần phải được mô phỏng - bạn có thể di chuyển chúng sang lớp riêng biệt, v.v.
Các vấn đề liên quan