2015-09-07 13 views
5

Tôi có mã sau nhận giá trị bộ đếm hiện tại từ DB. Sau đó, nó cập nhật các truy cập trong DB và sau đó một lần nữa nó lấy giá trị.Làm cách nào để tôi trả lại các giá trị khác nhau trên các cuộc gọi khác nhau tới mô hình?

int current = DBUtil.getCurrentCount(); 
DBUtil.updateCount(50);// it updates the current count by adding 50 
int latest = DBUtil.getCurrentCount(); 

Tôi muốn giả lập các phương pháp tĩnh theo cách mà cuộc gọi đầu tiên phải trả về 100 và cuộc gọi thứ hai sẽ trả về 150. Làm cách nào để sử dụng PowerMockito để đạt được điều này? Tôi đang sử dụng TestNG, Mockito cùng với PowerMock.

+0

Tại sao 'DBUtil' tĩnh? Tiêm một thể hiện, sau đó bạn không cần PowerMock. – durron597

Trả lời

10

Mockito hỗ trợ thay đổi giá trị trả lại; hỗ trợ này mở rộng sang PowerMockito. Chỉ cần sử dụng OngoingStubbing.thenReturn(T value, T... values)

OngoingStubbing<T> thenReturn(T value, T... values) 

Sets giá trị trả lại liền thì mới được trả lại khi phương pháp này được gọi.
ví dụ:

when(mock.someMethod()).thenReturn(1, 2, 3); 

cuối giá trị trả về trong chuỗi (trong ví dụ: 3) xác định hành vi của các cuộc gọi tiếp tục liên tiếp.

Vì vậy, trong trường hợp này, bạn sẽ làm gì:

PowerMockito.when(DBUtil.getCurrentCount()).thenReturn(100, 150); 

Lưu ý: câu trả lời này giả định rằng bạn đã biết làm thế nào để chế nhạo static phương pháp. Nếu không, hãy xem this question.

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