2012-04-19 2 views
5

Если у меня есть что-то вроде этого:Как вы издеваться объект в статическом методе

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

Теперь вы можете рассказать мне, как я могу создать модульный тест, который будет гарантировать, что метод генерирует правильный XML? Как я могу издеваться над XDocument (я использую Moq), не добавляя дополнительных параметров к вызову метода

ответ

6

Не пытайтесь насмехаться XDocument. Это не проблема здесь - это доступ к файловой системе, которая раздражает. Вы можете перейти в Stream написать манифест вместо:

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

Затем вы можете проверить, что с MemoryStream, но использовать FileStream к манифесту пути в реальности. Можно даже сделать этот метод внутреннего (с использованием [InternalsVisibleTo] так что вы можете получить доступ к нему из тестов) и перегрузки общественных вдоль без параметров линий:

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

Вы тогда не проверить что коды, но вы можете проверьте всю свою реальную логику.

+0

+1: разделение его на 'использование' -части в общедоступном методе + внутренний рабочий - действительно хороший совет. –

Смежные вопросы