Ngăn xếp công nghệ: .NET 4, C#, NUnitTDD: Có hợp lý để thử nghiệm tích hợp, nhưng không có thử nghiệm đơn vị?
Tôi đang cố gắng áp dụng phát triển hướng thử nghiệm cho dự án mới thực hiện xử lý hình ảnh. Tôi có một lớp cơ sở có chứa các phương thức I/O và các lớp con được chia sẻ thực hiện các thuật toán xử lý cụ thể khác nhau. Như tôi đã hiểu, các bài kiểm tra đơn vị không chạm vào hệ thống tệp hoặc các đối tượng khác và hành vi mô phỏng nơi xảy ra. Lớp cơ sở của tôi chỉ chứa các trình truy cập đơn giản và các cuộc gọi I/O hệ thống tập tin đơn giản.
public class BaseFile
{
public String Path { get; set; }
public BaseFile()
{
Path = String.Empty;
}
public BaseFile(String path)
{
if (!File.Exists(path))
{
throw new FileNotFoundException("File not found.", path);
}
Path = path;
}
}
Có giá trị nào trong thử nghiệm các phương pháp này không? Nếu vậy, làm thế nào tôi có thể tóm tắt các cuộc gọi đến hệ thống tập tin?
Câu hỏi khác của tôi là cách kiểm tra lớp con cụ thể cho loại tệp hình ảnh (~ 200 MB). Tôi đã tìm kiếm trang web và tìm thấy similarquestions, nhưng không ai xử lý các kích thước tệp mà tôi đang làm việc với dự án này. Là nó hợp lý cho một lớp học để có các bài kiểm tra tích hợp (sử dụng một "tập tin vàng"), nhưng không có bài kiểm tra đơn vị? Làm thế nào tôi có thể thực hiện đúng các phương pháp TDD và đầu tiên viết một thử nghiệm thất bại trong trường hợp này?
Nếu TDD khó áp dụng hoặc không đủ, không áp dụng. Nó không phải là viên đạn bạc. – CharlesB
@CharlesB, tôi đồng ý. Thật không may rằng tình cảm thường được sử dụng như là lý do cho việc không sử dụng TDD khi nó thực sự đúng và thuận lợi để làm như vậy. Đôi khi có đường cong lớn hoặc rất nhiều nền tảng để làm nhưng điều này thường trả hết. –
@CharlesB Không chắc chắn tôi đồng ý với điều đó. Vấn đề là sau đó lớp học này mà một số công việc không được thử nghiệm, và do đó sự tự tin của bạn để thay đổi nó được giảm bớt. Vấn đề là nó không dễ dàng giả lập các phương thức tĩnh trong System.IO, nhưng điều đó không có nghĩa là từ bỏ việc kiểm thử, nó chỉ có nghĩa là bạn cần làm một ít công việc để làm cho chúng có thể kiểm thử được. Đây là lý do tại sao MS giới thiệu System.Web.HttpContextBase, để giải quyết các vấn đề không dễ dàng có thể giả lập một HttpContext. Chúng tôi không cần phải kiểm tra httpContext, chỉ cần mã của chúng tôi tương tác chính xác với nó. – Andy