Có một số cách khác nhau để thực hiện việc này, tùy thuộc vào sở thích của bạn để làm rõ kết quả kiểm tra so với tính đồng nhất của văn bản kiểm tra. Đối với câu trả lời này tôi sẽ dính vào "chứng khoán" Java 8 và JUnit 4 không có phụ thuộc bổ sung.
Một cách, như đề xuất trong một comment by Ole V.V., chỉ đơn giản là để viết
assertEquals("correct", opt.get());
này chủ yếu là các công trình nhưng nếu bắt buộc là trống rỗng, sau đó get()
sẽ ném NoSuchElementException
. Điều này sẽ khiến JUnit báo hiệu lỗi thay vì thất bại, điều này có thể không phải là điều bạn muốn. Nó cũng không phải là rất rõ ràng những gì đang xảy ra trừ khi bạn đã biết rằng get()
ném NSEE trong trường hợp này.
Một cách khác là
assertTrue(opt.isPresent() && "correct".equals(opt.get()));
này cũng chủ yếu là các công trình nhưng nó không báo cáo giá trị thực tế nếu có sự không phù hợp, mà có thể làm cho gỡ lỗi bất tiện.
lựa chọn khác là
assertEquals("correct", opt.orElseThrow(AssertionFailedError::new));
này mang đến cho những thất bại ngay và báo cáo giá trị thực tế khi có sự không phù hợp, nhưng nó không phải là rất rõ ràng về việc tại sao AssertionFailedError
được ném. Bạn có thể phải nhìn chằm chằm vào nó một lúc cho đến khi bạn nhận ra rằng AFE bị ném khi tùy chọn trống.
Tuy nhiên thay thế khác là
assertEquals("correct", opt.orElseThrow(() -> new AssertionFailedError("empty")));
nhưng điều này đang bắt đầu để có được tiết.
Bạn có thể chia thành hai khẳng định,
assertTrue(opt.isPresent());
assertEquals("correct", opt.get());
nhưng bạn trước đó đã phản đối this suggestion vì tính cách rườm rà. Điều này không thực sự khủng khiếp trong quan điểm của tôi, nhưng nó có một số chi phí nhận thức vì có hai xác nhận riêng biệt, và nó dựa vào lần thứ hai chỉ được kiểm tra nếu thành công đầu tiên. Đây không phải là không chính xác nhưng nó là một chút tinh tế.
Cuối cùng, nếu bạn sẵn sàng để tạo ra một chút cơ sở hạ tầng của riêng bạn, bạn có thể tạo một lớp con phù hợp tên của AssertionFailedError
và sử dụng nó như thế này:
assertEquals("correct", opt.orElseThrow(UnexpectedEmptyOptional::new));
CẬP NHẬT Trong ý kiến, Ole VV đã đề xuất
assertEquals(Optional.of("correct"), opt);
Điều này hoạt động khá tốt và thực tế điều này có thể là tốt nhất.
Tôi chỉ đơn giản sử dụng 'assertEquals (" giá trị thực tế ", testingMethod(). Get());' Nó sẽ thất bại với ngoại lệ nếu tùy chọn trống, đủ để thử nghiệm đơn vị của bạn thất bại, vì vậy bạn thực sự không cần gì hơn. –