Tôi đang làm việc trên một dự án nhỏ cho bản thân mình vào lúc này và tôi đang sử dụng nó như một cơ hội để làm quen với kiểm tra đơn vị và duy trì tài liệu thích hợp.Phương pháp kiểm tra JUnit với tính chất ngẫu nhiên
Tôi có một lớp Deck
với một bộ bài (rất đơn giản và trung thực, tôi có thể chắc chắn rằng nó hoạt động mà không có bài kiểm tra đơn vị, nhưng như tôi đã nói) và nó có phương thức shuffle()
thay đổi thứ tự của các thẻ trong boong.
Việc thực hiện rất đơn giản và chắc chắn sẽ làm việc:
public void shuffle()
{
Collections.shuffle(this.cards);
}
Nhưng, làm thế nào tôi có thể thực hiện một thử nghiệm đơn vị cho phương pháp này. Suy nghĩ đầu tiên của tôi là kiểm tra xem thẻ trên cùng của boong tàu có khác biệt không sau khi gọi shuffle()
nhưng tất nhiên có khả năng là nó sẽ giống nhau. Suy nghĩ thứ hai của tôi là kiểm tra xem toàn bộ trật tự của thẻ có thay đổi hay không, nhưng một lần nữa chúng có thể có cùng thứ tự. Vì vậy, làm thế nào tôi có thể viết một bài kiểm tra đảm bảo phương pháp này hoạt động trong mọi trường hợp? Và, nói chung, làm thế nào bạn có thể đơn vị kiểm tra các phương pháp mà kết quả phụ thuộc vào một số ngẫu nhiên?
Chúc mừng,
Pete
Từ góc độ hợp lý, thẻ của bạn có bị coi là xáo trộn nếu đơn đặt hàng vẫn giữ nguyên không? –
Đối với câu hỏi cuối cùng của bạn, hãy xem http://stackoverflow.com/questions/122741/testing-for-random-value-thoughts-on-this-approach. Tôi cũng nghĩ rằng D. Knuth có cả một chương về nó. – ewernli
Tôi nghĩ rằng nó có ý nghĩa cho sàn được coi là xáo trộn nếu các thẻ vẫn còn theo thứ tự và một số đặt hàng lại đã xảy ra, mặc dù khó có thể trộn một bộ bài thực sự trở lại theo thứ tự mà chúng ban đầu in – Peter