2008-08-15 11 views
18

Tôi hiện đang viết một ứng dụng mini đơn giản, dựa trên bộ đếm thời gian trong C# thực hiện tác vụ n lần mỗi k giây.
Tôi đang cố gắng áp dụng một phong cách phát triển thử nghiệm theo định hướng, vì vậy mục tiêu của tôi là kiểm tra đơn vị tất cả các phần của ứng dụng.Đơn vị kiểm tra ứng dụng dựa trên bộ hẹn giờ?

Vì vậy, câu hỏi của tôi là: Có cách nào tốt để kiểm tra đơn vị một lớp dựa trên bộ đếm thời gian không?

Vấn đề, như tôi thấy, có nguy cơ lớn là các thử nghiệm sẽ mất nhiều thời gian để thực thi một cách khó chịu, vì chúng phải đợi quá lâu và các hành động mong muốn xảy ra.
Đặc biệt nếu bạn muốn dữ liệu thực tế (giây), thay vì sử dụng độ phân giải thời gian tối thiểu cho phép theo khuôn khổ (1 ms?).
Tôi đang sử dụng đối tượng mô phỏng cho hành động, để đăng ký số lần hành động được gọi và để hành động này thực tế không mất thời gian.

Trả lời

9

Điều tôi đã làm là giả lập bộ hẹn giờ và cũng là thời gian hệ thống hiện tại, sự kiện của tôi có thể được kích hoạt ngay lập tức, nhưng theo như mã được kiểm tra thì thời gian trôi qua là vài giây.

3

Tôi nghĩ rằng những gì tôi sẽ làm trong trường hợp này là kiểm tra mã thực sự thực hiện khi bộ đếm thời gian đánh dấu, thay vì toàn bộ chuỗi. Những gì bạn thực sự cần quyết định là liệu bạn có nên kiểm tra hành vi thực tế của ứng dụng hay không (ví dụ, nếu điều gì xảy ra sau mỗi lần đánh dấu thay đổi đáng kể từ đánh dấu này sang dấu tích khác), hoặc liệu nó có đủ hay không , hành động cũng giống nhau mỗi lần) để kiểm tra logic của bạn.

Vì hành vi của bộ hẹn giờ được đảm bảo không bao giờ thay đổi, nó sẽ hoạt động bình thường (nghĩa là bạn đã định cấu hình đúng) hay không; nó có vẻ là lãng phí nỗ lực để bao gồm điều đó trong thử nghiệm của bạn nếu bạn không thực sự cần.

+1

Vấn đề duy nhất tôi thấy với cách tiếp cận của bạn là bạn có thể sẽ phải phơi bày điều gì đó xảy ra mỗi khi các cuộc thăm dò diễn ra, đó có phải là một ý tưởng hay không? tức là phơi bày điều gì đó mà bạn không phải chỉ để thử nghiệm. Một thay thế có thể là nội bộ (và InternalsVisibleTo) nhưng rất nhiều người không thích điều đó – roundcrisis

1

Tôi đồng ý với Danny vì nó có thể có ý nghĩa từ góc độ đơn vị kiểm tra để đơn giản quên cơ chế hẹn giờ và chỉ xác minh rằng hành động hoạt động như mong đợi. Tôi cũng sẽ nói rằng tôi không đồng ý rằng nó lãng phí nỗ lực để bao gồm các cấu hình của bộ đếm thời gian trong một bộ thử nghiệm tự động của một số loại. Có rất nhiều trường hợp cạnh khi làm việc với các ứng dụng định thời gian và rất dễ để tạo ra một cảm giác an toàn giả bằng cách chỉ kiểm tra những thứ dễ kiểm tra.

Tôi khuyên bạn nên có bộ thử nghiệm chạy hẹn giờ cũng như tác vụ thực. Bộ phần mềm này có thể sẽ mất một lúc để chạy và có thể sẽ không phải là thứ mà bạn sẽ chạy mọi lúc trên máy cục bộ của mình. Nhưng việc thiết lập những thứ này lên một bản dựng tự động hàng đêm thực sự có thể giúp loại bỏ các lỗi trước khi chúng trở nên quá khó tìm và sửa chữa.

Vì vậy, trong ngắn hạn câu trả lời của tôi cho câu hỏi của bạn là đừng lo lắng về việc viết một vài bài kiểm tra mất nhiều thời gian để chạy. Đơn vị kiểm tra những gì bạn có thể và làm cho bộ kiểm tra đó chạy nhanh và thường xuyên nhưng hãy chắc chắn để bổ sung rằng với các bài kiểm tra tích hợp chạy ít thường xuyên hơn nhưng bao gồm nhiều ứng dụng và cấu hình của nó.