2013-02-15 34 views
5

Tôi đã cố gắng làm theo một quy trình làm việc TDD lỏng lẻo cho một trong các dự án nguồn mở của tôi. Đó là một API cho các lập trình viên khác sử dụng.Tôi có nên viết các bài kiểm tra trước khi chúng biên dịch không?

Như vậy, một khía cạnh quan trọng cũng như làm cho API "hoạt động" cũng đang thiết kế cách nó sẽ được tiêu thụ. Tôi đã nghe một số người nói rằng các bài kiểm tra viết trước khi họ biên dịch sẽ lãng phí thời gian và dễ bị viết lại liên tục cho đến khi API ổn định. Tôi cũng nghe nói rằng nó nên làm theo một quy trình làm việc như sau:

  1. Viết các bài kiểm tra mà sẽ không biên dịch
  2. Làm cho nó biên dịch
  3. Làm cho nó xanh

Tôi đã cố gắng làm theo quy trình này, nhưng tôi kết thúc với một số điều kỳ lạ. Ví dụ, trong API của tôi, tôi có hai phương pháp:

Handles(string pattern); //had this one already 
Handles(IPatternMatcher pattern); //needed this one 

tôi cần để có được những hình thức thứ hai của phương pháp bổ sung vào API của tôi. Vì vậy, tôi đã kết thúc với một thử nghiệm đơn giản chết như vậy:

public void Handles_SupportsIPatternMatcher() 
{ 
    var api=new MyAPI(); 
    api.Handles(new TestPatternMatcher()); 
} 

Mà có vẻ như một sự lãng phí sau khi nó được thực hiện.

Tôi có nên tiếp tục theo quy trình làm việc này hoặc có cách để cải thiện quy trình này không? Làm thế nào để giữ cho các bài kiểm tra viết về cơ bản chỉ kiểm tra lỗi biên dịch? Vì đó là API tiêu thụ công khai, tôi có nên lo lắng về các thử nghiệm như thế này không?

+1

"Red-Green-Refactor" có vẻ tốt hơn nhiều so với "Will Compile-Compiles-Green": P –

+2

Đây là một câu hỏi rất hay cho programmers.stackexchange.com –

+1

@SimonWhitehead cũng ... lỗi trình biên dịch kỹ thuật cũng được tính là "màu đỏ" :) – Earlz

Trả lời

1

Tôi sử dụng tính năng chia sẻ lại, bạn có thể tạo phương thức Xử lý trống sẽ nhận IPatternMatcher. TDD là điều mạnh mẽ, và bạn nên tiếp tục cố gắng. Tôi đã thử cả hai cách kiểm tra trước khi mã và kiểm tra sau khi mã, và tôi thấy rằng kiểm tra trước khi mã là điều mạnh mẽ. Bạn có thể gỡ lỗi mã rất quckly. Và kiểm tra là bảo hành rằng mã của bạn sẽ hoạt động như bạn mong đợi.

3

No.

Không viết mã để kiểm tra xem trình biên dịch có đang hoạt động hay không. Những loại kiểm tra này có ý nghĩa rất nhiều nếu bạn đang sử dụng các ngôn ngữ động (hoặc các tính năng động trong ngôn ngữ tĩnh), nơi chúng thực sự sẽ cho bạn biết rằng bạn đã quên thứ gì đó hoặc tái cấu trúc một thứ gì đó thành một bài kiểm tra đơn vị không thành công.

Điểm thực hiện kiểm tra đơn vị là không thực hiện được nếu nó bị lỗi. Nếu bạn có một lỗi trình biên dịch trong mã của bạn, việc xây dựng sẽ thất bại. Không cần phải đoán trước.

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