Tôi đang sử dụng Mockito để viết một bài kiểm tra đơn vị trong Java và tôi muốn xác minh rằng một phương thức nhất định là số cuối được gọi trên một đối tượng.Sử dụng Mockito để xác minh rằng không có gì được gọi sau phương thức
tôi đang làm một cái gì đó như thế này trong mã theo thử nghiệm:
row.setSomething(value);
row.setSomethingElse(anotherValue);
row.editABunchMoreStuff();
row.saveToDatabase();
Trong mô hình của tôi, tôi không quan tâm đến thứ tự mà tôi sửa tất cả mọi thứ trên hàng, nhưng nó rất quan trọng là Tôi không cố gắng làm bất cứ điều gì khác với nó sau khi tôi đã lưu nó. Có cách nào tốt để làm điều này?
Lưu ý rằng tôi không tìm kiếm verifyNoMoreInteractions: nó không xác nhận rằng saveToDatabase là điều cuối cùng được gọi, và nó cũng thất bại nếu tôi gọi bất cứ thứ gì trên hàng mà tôi không xác minh rõ ràng. Tôi muốn để có thể nói điều gì đó như:
verify(row).setSomething(value);
verify(row).setSomethingElse(anotherValue);
verifyTheLastThingCalledOn(row).saveToDatabase();
Nếu nó giúp, tôi chuyển sang Mockito từ một thử nghiệm JMock rằng đã làm điều này:
row.expects(once()).method("saveToDatabase").id("save");
row.expects(never()).method(ANYTHING).after("save");
Lưu ý từ tương lai: chúng tôi cuối cùng đã tái cấu trúc để tránh sự phụ thuộc vào trật tự. Cụ thể, chúng tôi đã chuyển phần saveToDatabase() sang một lớp bên ngoài của mã, nơi nó sẽ tự động được gọi vào đúng thời điểm. Nói chung, nếu bạn cần phải làm một cái gì đó như thế này với một giả, các xét nghiệm của bạn đang nói cho bạn để refactor. Điều đó nói rằng, nó vẫn còn tốt đẹp để có một bài kiểm tra có thể làm việc cho đến khi thiết kế được thay đổi. –