Tôi là một lập trình viên phòng thủ và là một fan hâm mộ lớn của Hợp đồng Mã microsofts.
Bây giờ tôi không thể luôn sử dụng C # và trong hầu hết các ngôn ngữ, công cụ duy nhất tôi có là các xác nhận. Vì vậy, tôi thường kết thúc với mã như thế này:
class
{
function()
{
checkInvariants();
assert(/* requirement */);
try
{
/* implementation */
}
catch(...)
{
assert(/* exceptional ensures */);
}
finally
{
assert(/* ensures */);
checkInvariants();
}
}
void checkInvariants()
{
assert(/* invariant */);
}
}
Tuy nhiên, mô hình này (hoặc bất cứ điều gì bạn sẽ gọi nó) dẫn đến rất nhiều mã lộn xộn.
Tôi đã bắt đầu tự hỏi nếu nó thực sự đáng nỗ lực và liệu thử nghiệm đơn vị thích hợp sẽ bao gồm điều này?