Tôi tin rằng đây là một quan niệm sai lầm theo bất kỳ cách nào tôi có thể nghĩ ra.
Mã kiểm tra kiểm tra mã sản xuất hoàn toàn không giống nhau. Tôi sẽ chứng minh bằng python:
def multiply(a, b):
"""Multiply ``a`` by ``b``"""
return a*b
Sau đó, một bài kiểm tra đơn giản sẽ là:
def test_multiply():
assert multiply(4, 5) == 20
Cả hai chức năng có một định nghĩa tương tự nhưng cả hai đều làm những việc rất khác nhau. Không có mã trùng lặp ở đây. ;-)
Nó cũng xảy ra rằng mọi người viết các bài kiểm tra trùng lặp về cơ bản có một khẳng định cho mỗi chức năng kiểm tra. Đây là sự điên rồ và tôi đã thấy mọi người làm điều này. Đây là thực hành xấu.
def test_multiply_1_and_3():
"""Assert that a multiplication of 1 and 3 is 3."""
assert multiply(1, 3) == 3
def test_multiply_1_and_7():
"""Assert that a multiplication of 1 and 7 is 7."""
assert multiply(1, 7) == 7
def test_multiply_3_and_4():
"""Assert that a multiplication of 3 and 4 is 12."""
assert multiply(3, 4) == 12
Hãy tưởng tượng làm điều này cho hơn 1000 dòng mã hiệu quả. Thay vào đó, bạn kiểm tra trên cơ sở mỗi 'tính năng':
def test_multiply_positive():
"""Assert that positive numbers can be multiplied."""
assert multiply(1, 3) == 3
assert multiply(1, 7) == 7
assert multiply(3, 4) == 12
def test_multiply_negative():
"""Assert that negative numbers can be multiplied."""
assert multiply(1, -3) == -3
assert multiply(-1, -7) == 7
assert multiply(-3, 4) == -12
Bây giờ khi các tính năng được thêm / xóa, tôi chỉ phải xem xét thêm / xóa một chức năng kiểm tra.
Bạn có thể nhận thấy tôi đã không áp dụng for
các vòng lặp. Điều này là bởi vì lặp đi lặp lại một số điều là tốt. Khi tôi đã áp dụng các vòng lặp, mã sẽ ngắn hơn rất nhiều. Nhưng khi một xác nhận thất bại, nó có thể làm xáo trộn đầu ra hiển thị một thông điệp mơ hồ. Nếu điều này xảy ra thì các bài kiểm tra của bạn sẽ ít hữu ích hơn và bạn sẽ cần một trình gỡ lỗi để kiểm tra xem mọi thứ có vấn đề gì.