Xem xét các phương pháp sau đây:Làm thế nào để giả lập gọi phương thức và trả về giá trị mà không cần chạy phương thức?
public boolean isACertainValue() {
if(context.getValueA() != null && context.getValueA().toBoolean() == true) {
if(context.getType() != null && context.getType() == ContextType.certainType) {
return true;
}
}
return false;
}
tôi đã không viết mã này, nó là xấu xí như địa ngục, nó là hoàn toàn overcomplicated nhưng tôi phải làm việc với nó.
Bây giờ tôi muốn thử nghiệm một phương pháp dựa vào một cuộc gọi đến phương pháp này.
Tôi nghĩ tôi có thể đối phó với điều này bằng cách:
Mockito.when(spy.isACertainValue()).thenReturn(true);
vì đó là trường hợp tôi muốn thử nghiệm.
Nhưng nó không hoạt động như nó vẫn đang kêu gọi các phương pháp thân:/
tôi nhận được nullpointers hay đúng hơn là tôi nhận được một cái gì đó dọc theo dòng của
misusing.WrongTypeOfReturnValue; Boolean không thể được trả về bởi getValueA(). getValueA() sẽ trả về ValueA
Vì vậy, tôi đã cố gắng (như là một cách giải quyết khác) để thực hiện:
Mockito.when(contextMock.getValueA()).thenReturn(new ValueA());
và Mockito.when(contextMock.getType()).thenReturn(ContextType.certainType);
nhưng sau đó tôi nhận được một nullpointer mà tôi không thể dường như có thể tìm lỗi.
Vì vậy, làm thế nào nó được thực hiện ngay trong trường hợp này?
Đó chính xác là cách thực hiện, nhưng có thể có giá trị IN giá trị đó mà bạn cần thêm trong thử nghiệm của mình, vì vậy bạn cũng nên thử đối tượng được trả về chứ không phải trả lại một thể hiện được khởi tạo với một hàm tạo (mặc định). – Stultuske