2013-01-14 26 views
5

Đây là từ JMockit Hướng dẫn chính thức:JMockit nhiều trường hợp ngoại lệ như kết quả cho phương pháp gọi

@Test 
    public void doSomethingHandlesSomeCheckedException() throws Exception 
    { 
     new Expectations() { 
     DependencyAbc abc; 

     { 
      abc.stringReturningMethod(); 
      returns("str1", "str2"); 
      result = new SomeCheckedException(); 
     } 
     }; 

     new UnitUnderTest().doSomething(); 
    } 

Có thể nêu ngược lại, có nghĩa là nhiều kết quả và một trở lại - Tôi cần phải ném 2 trường hợp ngoại lệ và chỉ sau đó trả về một giá trị tốt. Một cái gì đó như thế này là những gì Im looking for:

abc.stringReturningMethod(); 
    returns(new SomeCheckedException(), new SomeOtherException(),"third"); 

này không hoạt động, JMockit không thể cast những ngoại lệ đối với String (đó là kiểu trả về của stringReturningMethod)

Trả lời

6

Viết nó như thế này:

abc.stringReturningMethod(); 
    result = new SomeCheckedException(); 
    result = new SomeOtherException(); 
    result = "third"; 
+2

Sẽ không đặt kết quả cho cả ba cuộc gọi là 'third'? – Queequeg

+0

Không. Nó sẽ ghi lại ba kết quả liên tiếp cho 'stringReturningMethod()'. (Một "kết quả" là một giá trị trả về, một ngoại lệ để ném, hoặc một 'Đại biểu' để thực thi. JMockit tự động ghi lại các nhiệm vụ này như là các lời gọi đến các phương thức nội bộ của nó, đó là lý do tại sao nó hoạt động.) –

+0

Điều này không có tác dụng. Bạn phải làm 'result = new SomeCheckedException(); result = new SomeOtherException(); trả về ("Non-exception-String-value"); ' – searchengine27

1

Tôi không biết nếu có một phím tắt để làm điều đó nhưng bạn luôn có thể ghi lại rằng phương pháp này sẽ được gọi nhiều lần:

abc.stringReturningMethod(); 
result = new SomeCheckedException(); 

abc.stringReturningMethod(); 
result = new SomeOtherException(); 

abc.stringReturningMethod(); 
result = "third"; 
+0

sẽ làm việc này với 'NonStrictExpectations'? – Queequeg

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