2010-08-25 24 views
12

Tôi có nên viết
assertTrue("User logged in", user.isLoggedIn());
hoặc
assertTrue("User is not logged in", user.isLoggedIn());
Phương pháp xác nhận JUnit nên được diễn giải trong tích cực hoặc tiêu cực?

Cựu cung cấp đọc tốt hơn bên trong các tập tin nguồn:
"Tôi khẳng định rằng sau đây là đúng: Người dùng đăng nhập."

Các thông báo lỗi có thể được đọc cả hai cách: "Các lỗi được mà người dùng đang đăng nhập"
java.lang.AssertionError: User logged in
"Có một lỗi trong việc khẳng định mà người dùng đang đăng nhập"

tài liệu JUnit không cung cấp một hướng dẫn rõ ràng mà nó nên được, ngoại trừ nó là
"thông điệp xác định cho {@link AssertionError}",
Và trong cả hai trường hợp, các văn bản xác định thử nghiệm hạnh phúc chạy.

Cách sử dụng phổ biến là gì?

Trả lời

9

Làm thế nào về:

assertTrue("User should be logged in", user.isLoggedIn()); 

trình cả hai cách.

+0

Tôi thích điều này, ngắn gọn nhưng đến thời điểm này. – Steve

2

Vâng, bạn cũng có thể tuyên bố giả định của bạn, và sau đó giả định không giữ. Giống như vậy:

assertTrue("Expected user to be logged it, and wasn't", user.isLoggedIn()); 

Làm cho các thông điệp rõ ràng hơn, nhưng còn phải nhập và đọc.

+1

+1, nó hoàn toàn đáng giá càng rõ ràng càng tốt - khi một thất bại xuất hiện ở giữa hàng trăm bài kiểm tra bạn muốn càng nhiều ngữ cảnh càng tốt để giúp bạn hiểu lý do cho nó – Brian

+0

Đây là dạng tiêu cực , sau đó. – Fletch

+0

@jjnguy Tôi không đồng ý. "Hoàn toàn" biết bối cảnh có thể có nghĩa là, bạn sẽ in ra bãi chứa bộ nhớ hệ điều hành hoàn chỉnh (một chút quá mức). Vấn đề là chỉ cung cấp thông tin liên quan. Và các văn bản khẳng định tích cực chỉ dành cho mục đích này. –

-1

Bạn nên bao gồm cả hai trường hợp. Bạn có trường hợp kiểm tra tốt hơn khi bạn triangulate xác nhận của bạn.

1

Để tránh câu hỏi đó, tôi ngày càng có xu hướng sử dụng assertThat thay vì các phương pháp * khẳng định "cấp thấp". Thật vậy, như this article giải thích, khẳng định rằng sẽ cung cấp cho bạn một thông báo lỗi rất rõ ràng trong trường hợp thất bại.

0

Bạn có thể sử dụng:

assertTrue("Test if user is logged in", user.isLoggedIn()); 

Khi bạn làm điều này, bạn đang xác minh rằng user.isLoggedIn() là đúng, bạn có thể không thực sự nói rằng người dùng đang đăng nhập hay không, bạn vẫn chưa biết, bạn chỉ đang thử nghiệm nó.

0

Thú vị, tôi sẽ sử dụng:

assertTrue("user should be logged in", user.isLoggedIn()); 

mà nói với tôi gì được mong đợi nhà nước của khẳng định này.

Tôi nghĩ lựa chọn tốt nhất là sự lựa chọn của bạn.

3

Hãy nghiêm túc tích cực trong thông điệp khẳng định của bạn

Sử dụng tích cực văn bản khẳng định như trong ví dụ đầu tiên của bạn, hoặc như:

assertTrue("User is logged in", user.isLoggedIn()); 

Lý do là:

  • khẳng định dương tính là ngắn hơn
  • có một điều kiện được xác nhận mà bạn đang kiểm tra và nhiều lý do có thể xảy ra, tại sao nó lại sai. Không cố gắng để phát hiện nguyên nhân, chỉ cần nhà nước, những gì khẳng định đã thất bại.
  • nó dễ đọc hơn trong mã của bạn. Nó thường được khuyến khích để mã trong các biểu thức tích cực, mà tiết kiệm vài negations của các điều kiện trong tâm trí của người đọc
  • nó vẫn có thể đọc được trong các dấu vết lỗi, mà không được hiểu bởi người dùng thông thường, nhưng bởi một lập trình viên, những người sẽ kết thúc trong mã anyway. Và thậm chí sysadmin, những người sẽ không có quyền truy cập vào các mã sẽ cung cấp cho tác giả với thông báo lỗi hoàn chỉnh và lập trình viên sẽ hiểu, nó đến từ một khẳng định.

Cố gắng cung cấp "tất cả thông tin theo ngữ cảnh" trong thông báo khẳng định không cải thiện tình hình, thay vào đó tạo ra sự lộn xộn thông tin.

Bạn biết đấy, trình lập trình tốt gỡ lỗi mã và cung cấp mã làm việc và ngắn hơn.

Sử dụng thông điệp khẳng định tích cực làm điều đầu tiên để thực hiện theo hướng này.

Một hướng khác - vá mã với nhiều thứ không cần thiết hơn là mở đường đến địa ngục lập trình.

Các vấn đề liên quan