2012-10-22 31 views
7

Tôi có một thử nghiệm đơn vị nơi tôi đang chế nhạo java.net.URI lớp. Hơn nữa, tôi đang tạo một jMockit NonStrictExpectation nơi tôi đang mong đợi yêu cầu URI.getPath() và trả về một chuỗi cụ thể.Trả lại các giá trị khác nhau mỗi lần từ kỳ vọng jMockit

Mã đang được thử nghiệm gọi URI.getPath() hai lần, trong đó tôi cần phải gửi một chuỗi khác nhau mỗi lần.

Đây là phương pháp thực tế của tôi được kiểm tra:

public void validateResource() { 
    // some code 
    URI uri = new URI(link1.getHref()); 
    String path1 = uri.getPath(); 
    // some more code 
    uri = new URI(link2.getHref()); 
    String path2 = uri.getPath(); 
} 

Đây là mã đơn vị kiểm tra:

@Mocked URI uri; 

@Test 
public void testValidateResource() { 
    new NonStrictExpectations() { 
     { 
      // for the first invocation 
      uri.getPath(); returns("/resourceGroup/1"); 

      // for the second invocation [was hoping this would work] 
      uri.getPath(); returns("/resource/2"); 
     } 
    }; 
    myObject.validateResource(); 
} 

Bây giờ, tôi muốn "/resource/2" để được trở về từ kỳ vọng của tôi khi URI.getPath() được gọi thứ hai thời gian. Nhưng nó luôn đạt đến kỳ vọng đầu tiên và trả về "/recourceGroup/1". Đây là vấn đề của tôi.

Làm cách nào để điều đó xảy ra? Tôi thực sự không thể sử dụng StrictExpectations do một số lý do và phải gắn bó với NonStrictExpectations.

Trả lời

15

Có vẻ như bạn chỉ cần liệt kê uri.getPath() một lần, và sử dụng phiên bản varargs của returns ... một cái gì đó như thế này:

uri.getPath(); returns("/resourceGroup/1", "/resourceGroup/2"); 

này được theo documentation, dù sao ... tôi đã không kiểm tra Bản thân mình.

Trong trường hợp ghi nhiều giá trị trả về liên tiếp cho một kỳ vọng nhất định, có thể thực hiện một cuộc gọi đơn lẻ cho phương thức trả về (Đối tượng, Đối tượng ...).

+0

Làm việc như một sự quyến rũ ... Cảm ơn :) –

+0

Tuyệt vời, vui vì nó đã hoạt động! –

+0

Liên kết tài liệu trong câu trả lời bị hỏng. Đây là [link] được cập nhật (http://jmockit.org/tutorial/Mocking.html#results) –

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