Tôi đang cố gắng giả lập lớp J232I Query với mockito, tuy nhiên nó không mô phỏng các phương thức của lớp cơ sở SqlStatement
.các sự cố chế nhạo một lớp
Khi chạy mã bên dưới câu lệnh khi thực sự gọi triển khai cụ thể trong lớp cơ sở và không thành công với NullPointerException
.
import java.util.Map;
import org.junit.Test;
import org.skife.jdbi.v2.Query;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class TestClass {
@Test
public void testBind() {
Query<Map<String,Object>> mockQuery = mock(Query.class);
when(mockQuery.bind("xxx", 5)).thenReturn(mockQuery); //this line fails
//more stuff here
}
}
Tôi cũng đã thử điều này với EasyMock và nhận được kết quả tương tự, không thể giả lập phương pháp này.
More Info:
- phiên bản Mockito là 1.9.5 phiên bản
- JDBI là 2.4.1 (một trong đó hiện tàu với dropwizard)
Trường hợp ngoại lệ là:
java.lang.NullPointerException
at org.skife.jdbi.v2.SQLStatement.bind(SQLStatement.java:434)
at TestClass.testBind(TestClass.java:17)
at ....
Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?
Đây không phải là câu trả lời, nhưng trong kinh nghiệm của tôi chế nhạo loại mã DAO này là một sự lãng phí thời gian. Nó sẽ không phơi bày các lỗi bạn thực hiện khi sử dụng API JDBI. Viết các bài kiểm tra dựa vào cơ sở dữ liệu thực. – artbristol