Có nhiều ý kiến khác nhau về ý nghĩa của việc thử nghiệm các phương pháp riêng tư, ví dụ: here và here. Cá nhân tôi nghĩ rằng nó có ý nghĩa, câu hỏi là làm thế nào để làm điều đó đúng. Trong C++, bạn có thể sử dụng #define
hack hoặc tạo lớp kiểm tra friend
, trong C# có InternalsVisibleToAttribute, nhưng trong Java, chúng tôi phải sử dụng reflection hoặc để làm cho chúng "hiển thị để kiểm tra" và annotate them as such. Những bất lợi của cả hai nên khá rõ ràng.Công cụ Java để thử nghiệm các phương pháp riêng tư?
Tôi nghĩ nên có điều gì đó tốt hơn. Bắt đầu với
public class Something {
private int internalSecret() {
return 43;
}
}
nó sẽ được tốt đẹp để có thể gọi các phương thức tư nhân trong mã kiểm tra như
@MakeVisibleForTesting Something something = new Something();
Assert.assertEquals(43, something.internalSecret());
Ở đây, chú thích âm thầm sẽ chuyển đổi tất cả các cuộc gọi đến các phương pháp riêng của something
sử dụng phản ánh. Tôi tự hỏi nếu Lombok có thể làm điều đó (và sẽ yêu cầu các tác giả). Có thể thực hiện nhiều phép thuật chứng tỏ quá phức tạp, và trong mọi trường hợp, nó sẽ mất một thời gian, vì vậy tôi đang tìm kiếm một số thay thế. Có lẽ chú thích lớp dưới kiểm tra với một cái gì đó giống như @Decapsulate
và sử dụng một bộ xử lý chú thích để tạo ra một lớp Decapsulated_Something
trông như
public class Decapsulated_Something {
public Decapsulated_Something(Something delegate) {
this.delegate = delegate
}
public boolean internalSecret() {
// call "delegate.internalSecret()" using reflection
}
...
}
mà sẽ cho phép sử dụng
Decapsulated_Something something = new Decapsulated_Something(new Something());
Assert.assertEquals(43, something.internalSecret());
Tôi không có nhiều kinh nghiệm với chú thích xử lý, vì vậy tôi hỏi đầu tiên ở đây:
- Việc này phức tạp như thế nào?
- Tôi đã quên gì?
- Bạn nghĩ gì về nó nói chung?
Bạn đang yêu cầu một công cụ linh hoạt, hoặc làm thế nào để viết một mình? – Raedwald
@Raedwald Tôi đang hỏi cách giải quyết nó. Vắt bản thân mình là một lựa chọn, nhưng việc phát minh lại bánh xe không được mong muốn một cách rõ ràng. – maaartinus