Tôi có một loạt các lớp liên quan đến việc xác nhận các giá trị. Chẳng hạn, một RangeValidator
lớp kiểm tra xem một giá trị có nằm trong phạm vi được chỉ định hay không.
Mỗi lớp trình xác nhận chứa hai phương thức: is_valid(value)
trả về True
hoặc False
tùy thuộc vào giá trị và ensure_valid(value)
kiểm tra một giá trị được chỉ định và không làm gì nếu giá trị hợp lệ hoặc ném một ngoại lệ cụ thể nếu giá trị không khớp với quy tắc được xác định trước.
Hiện tại có hai bài kiểm tra đơn vị liên quan đến phương pháp này:
Giá trị vượt qua giá trị không hợp lệ và đảm bảo rằng ngoại lệ được đưa ra.
def test_outside_range(self): with self.assertRaises(demo.ValidationException): demo.RangeValidator(0, 100).ensure_valid(-5)
Một trong đó vượt qua một giá trị hợp lệ.
def test_in_range(self): demo.RangeValidator(0, 100).ensure_valid(25)
Mặc dù bài kiểm tra thứ hai thực hiện công việc của mình, thất bại nếu ném ngoại lệ, và thành công nếu ensure_valid
không ném bất cứ thứ gì mà thực tế là không có gì assert
bên trong trông lạ cả. Một người đọc mã như vậy sẽ ngay lập tức tự hỏi tại sao có một bài kiểm tra dường như không làm gì cả.
Đây có phải là cách làm hiện tại khi thử nghiệm các phương pháp không trả về giá trị và không có tác dụng phụ? Hay tôi nên viết lại bài kiểm tra theo một cách khác? Hoặc đơn giản là đặt một bình luận giải thích những gì tôi đang làm?
self
tham khảo) và không trả về kết quả, thì đó không phải là một hàm thuần túy.
void
bằng nhiều ngôn ngữ và có các quy tắc ngớ ngẩn.) Ngoài ra, bạn có thể có vô hạn vòng lặp (hoạt động ngay cả khi "trả về không có kết quả" thực sự có nghĩa là không trả lại kết quả.
unit -> unit
trong bất kỳ ngôn ngữ nào coi đơn vị là kiểu dữ liệu tiêu chuẩn thay vì thứ gì đó đặc biệt kỳ diệu. Thật không may, nó chỉ trả về đơn vị và không làm gì khác.