Tôi đang sử dụng Mockito để kiểm tra JUnit. Vì vậy, có một hạng A cho rằng được sử dụng từ mã tôi muốn thử nghiệm:Mockito: khi Phương pháp A.a được gọi thì thực hiện B.b
class A{
public A(){}
public final String a(String x){
return "A.a: " + x;
}
}
và tôi muốn thay thế A.a Phương pháp gọi với một lời gọi phương thức với các đối số giống nhau và cùng một loại giá trị trả về. Như bạn có thể thấy, nó không thể ghi đè lên phương thức a bằng cách mở rộng lớp vì nó là cuối cùng. Vì vậy, những gì tôi có bây giờ là một lớp B với phương pháp B.b:
class B{
public B(){}
public String b(String x){
return "B.b: " + x;
}
}
Bây giờ tôi muốn chắc chắn mỗi khi A.a được gọi là từ mã, giá trị trả về của B.b được sử dụng để thay thế. Có một khả năng để đạt được điều này với Mockito (một cái gì đó như Mockito.when(A.a(x)).thenReturn(B.b(x));
) nhưng với cùng một tham số x, mà không biết giá trị của x?
Bất kỳ trợ giúp nào sẽ được đánh giá cao, cảm ơn bạn trước!
Kịch bản bạn muốn thử nghiệm là gì? Tại sao A.a() là cuối cùng? và Tại sao bạn muốn thay thế cuộc gọi của A.a()? Từ những gì tôi hiểu bạn muốn ghi đè A.a(), phải không? – Adelin
Tôi đang thử nghiệm một dự án Thư viện Android (tôi cũng sử dụng Robolectric để có thể thử nghiệm các dự án Android). Trong trường hợp cụ thể này tôi muốn thử nghiệm một cơ sở dữ liệu. Mã này gọi trình phân giải nội dung, nhà cung cấp nội dung được xác định trong AndroidManifest.xml và tôi không tìm thấy cách để đặt nhà cung cấp nội dung theo chương trình vì nó không được tải từ xml khi chạy thử nghiệm. Vì vậy, tôi muốn mã gọi nhà cung cấp nội dung thay vì trình giải quyết nội dung. – user1448982