2012-04-19 24 views
5

Nếu tôi có một cái gì đó như thế này:Làm thế nào để bạn chế nhạo đối tượng trong một phương pháp tĩnh

static class ManifestGenerator 
{ 
    public static void GenerateManifestFile(){ 
    var doc = new XDocument(); 
    ... 
    ... xml stuff added to doc 
    ... 
    doc.Save(manifestFilePath) 
} 

Bây giờ bạn có thể vui lòng cho tôi biết làm thế nào tôi có thể tạo ra một thử nghiệm đơn vị đó sẽ đảm bảo rằng phương pháp tạo xml có đúng không? Làm thế nào tôi có thể thử XDocument (Tôi đang sử dụng Moq), mà không thêm các tham số bổ sung vào phương thức gọi

Trả lời

6

Đừng cố gắng giả lập XDocument. Đó không phải là vấn đề ở đây - đó là quyền truy cập vào hệ thống tệp gây phiền nhiễu. Bạn có thể vượt qua trong một Stream viết manifest để thay:

public static void GenerateManifestFile(Stream output) { 
    var doc = new XDocument(); 
    ... 
    ... xml stuff added to doc 
    ... 
    doc.Save(output); 
} 

Sau đó, bạn có thể kiểm tra điều đó với một MemoryStream, nhưng sử dụng một FileStream đến con đường manifest trong thực tế. Bạn thậm chí có thể làm cho phương pháp này nội bộ (sử dụng [InternalsVisibleTo] vì vậy bạn vẫn có thể truy cập nó từ kiểm tra) và một tình trạng quá tải parameterless công cộng dọc theo dòng:

using (Stream output = File.OpenWrite(manifestFilePath)) 
{ 
    GenerateManifestFile(output); 
} 

Sau đó, bạn không kiểm tra rằng mã, nhưng bạn có thể kiểm tra tất cả logic thực của bạn.

+0

+1: tách nó thành 'sử dụng'-phần trong phương pháp công cộng + nhân viên nội bộ thực sự là một mẹo hay. –

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