Tôi đã sử dụng Java 8 trong một vài tháng và tôi đã bắt đầu sử dụng các biểu thức Lambda, rất thuận tiện cho một số trường hợp. Tuy nhiên, tôi thường gặp một số vấn đề để kiểm tra đơn vị mã sử dụng Lambda.Mã thử nghiệm đơn vị với Java 8 Lambdas
Hãy làm ví dụ các pseudo-code sau:
private Bar bar;
public void method(int foo){
bar.useLambda(baz -> baz.setFoo(foo));
}
Một cách tiếp cận sẽ được chỉ cần xác minh các cuộc gọi trên thanh
verify(bar).useLambda(Matchers.<Consumer<Baz>>.any());
Nhưng, bằng cách làm đó, tôi không kiểm tra Mã của Lambda.
Cũng lưu ý rằng tôi không thể thay thế Lambda với một tài liệu tham khảo phương pháp và sử dụng phương pháp:
bar.useLambda(This::setFooOnBaz);
Bởi vì tôi sẽ không có foo trên phương pháp đó. Hoặc ít nhất đó là những gì tôi nghĩ.
Bạn có gặp vấn đề này trước đây chưa? Làm thế nào tôi có thể kiểm tra hoặc refactor mã của tôi để kiểm tra nó đúng cách?
Sửa
Từ những gì tôi đang mã hóa là một bài kiểm tra đơn vị, tôi không muốn nhanh chóng thanh, và tôi sẽ sử dụng một mô hình thay thế. Vì vậy, tôi sẽ không thể chỉ xác minh cuộc gọi baz.setFoo
.
Bạn đã đúng khi bạn đã nói rằng lambda thực sự của tôi phức tạp hơn một chút so với một bộ, nhưng nó vẫn đủ đơn giản để xem xét rằng nó sẽ không phá vỡ. Sau khi tất cả, có lẽ tôi chỉ cố gắng để đơn vị kiểm tra 100% mã, và đó là vấn đề gốc. Cảm ơn! – Fdiazreal