Tôi đang cố gắng thực hiện thói quen viết bài kiểm tra đơn vị, tôi đã viết một vài trước đây nhưng chúng thường khá cơ bản ... Tôi muốn bắt đầu thực hiện để TDD như tôi muốn cải thiện chất lượng của mã của tôi (thiết kế và cấu trúc) - giảm khớp nối, trong khi cùng một lúc hy vọng giảm số hồi quy mà trượt qua để xây dựng một thử nghiệm.Phương pháp thử nghiệm đơn vị với tệp IO
Tôi đã thực hiện một dự án tương đối đơn giản mà tôi bắt đầu thực hiện. Chương trình kết quả theo dõi một thư mục và sau đó hoạt động trên các tệp trong thư mục này.
Dưới đây là một ví dụ điển hình của một số mã được chiết xuất từ dự án:
private string RestoreExtension(String file)
{
var unknownFile = Path.GetFileName(file);
var ignoreDir = Path.GetDirectoryName(file) + "\\Unknown";
string newFile;
//We need this library for determining mime
if (CheckLibrary("urlmon.dll"))
{
AddLogLine("Attempting to restore file extension");
var mime = GetMimeType(BufferFile(file, 256));
var extension = FileExtensions.FindExtension(mime);
if (!String.IsNullOrEmpty(extension))
{
AddLogLine("Found extension: " + extension);
newFile = file + "." + extension;
File.Move(file, newFile);
return newFile;
}
}
else
{
AddLogLine("Unable to load urlmon.dll");
}
AddLogLine("Unable to restore file extension");
if (!Directory.Exists(ignoreDir))
{
Directory.CreateDirectory(ignoreDir);
}
var time = DateTime.Now;
const string format = "dd-MM-yyyy HH-mm-ss";
newFile = ignoreDir + "\\" + unknownFile + "-" + time.ToString(format);
File.Move(file, newFile);
return String.Empty;
}
Câu hỏi:
Làm thế nào tôi có thể thử nghiệm một phương pháp sử dụng IO? Tôi không thực sự muốn sử dụng một tập tin thực sự vì điều này sẽ chậm (và nhiều hơn nữa của một bài kiểm tra tích hợp?), Nhưng tôi không thể thực sự nhìn thấy một cách khác. Tôi có thể thêm một lớp trừu tượng IO có thể chuyển đổi, nhưng điều này nghe với tôi như nó có thể làm phức tạp mã không cần thiết ...
Là một dự án như thử nghiệm đơn vị có giá trị này? Ý tôi là, nó quá đơn giản. Một khi bạn thoát ra ngoài. Net và các cuộc gọi thư viện của bên thứ ba không còn nhiều nữa ... Vậy có phải là một trường hợp mà số lượng công việc để làm cho nó có thể kiểm chứng có nghĩa là nó không phải là một ứng cử viên tốt để kiểm tra?
Rất nhiều phương pháp trong dự án này là riêng tư, vì dự án này xảy ra là dịch vụ cửa sổ. Tôi đã đọc bạn chỉ nên thực sự thử nghiệm các phương pháp được bên ngoài có thể nhìn thấy (công khai hoặc tiếp xúc thông qua một giao diện), nó không chắc trong trường hợp này tuy nhiên tôi muốn phơi bày bất kỳ phương pháp của riêng tôi. Vì vậy, dự án này có giá trị thử nghiệm (như id có lẽ cần phải hoặc là thay đổi phương thức truy cập phương thức công khai hoặc thêm một số thuộc tính để NUnit có thể nhìn thấy chúng)?
Cheers
tôi biết điều này là cũ, nhưng nó dễ dàng hơn để sử dụng Microsoft Fakes – zaitsman