2013-07-01 2 views
1

У меня есть следующий метод.Операции Mocking IO в Nunit с использованием Typemock

public string CreateFile(string path, string fileName) 
{ 
    string fullPath = path + "ExportedFiles\\"; 
    if (Directory.Exists(fullPath)) 
    { 
     DirectoryInfo dir = new DirectoryInfo(fullPath); 
     foreach (FileInfo fi in dir.GetFiles()) 
     { 
      fi.Delete(); 
     } 
    } 
    else 
    { 
     Directory.CreateDirectory(fullPath); 
    } 
    string filePath = fullPath + fileName; 
    return filePath; 
} 

В своем тестовом примере я попытался использовать следующее.

[Test, Isolated] 
public void TestCreateFileIfPathExists() 
{ 
    Isolate.WhenCalled(() => System.IO.Directory.Exists("gsgs")).WillReturn(true); 
    Isolate.WhenCalled(() => testMyClass.CreateFile(@"D:\testFolder\","TestFile")).CallOriginal(); 
    string result = testMyClass.CreateFile(@"D:\testFolder\", "TestFile"); 
    Assert.AreEqual("D:\\testFolder\\ExportedFiles\\TestFile", result); 
} 

Это бросает следующее исключение typemock.

TypeMock.TypeMockException: * Нет вызовы методов найдены в блоке записи. Проверьте: * Вы пытаетесь подделать поле вместо свойства? * Вы пытаетесь подделать неподдерживаемый тип mscorlib?

Есть ли способ решить эту проблему?

+0

Возможный дубликат [Как вы издеваетесь над файловой системой в C# для модульного тестирования?] (Http://stackoverflow.com/questions/1087351/how-do-you-mock-out-the-file-system -in-c-sharp-for-unit-testing) –

+0

, но они не упомянули, как достичь этого, используя Typemock – user2435880

+0

Можете ли вы поделиться кодом для всего модульного теста? –

ответ

1

Если вы посмотрите на последний вопрос о исключением того, что вы получаете,

* Вы пытаетесь фальсифицировать неподдерживаемый тип mscorlib?

есть на самом деле веб-адрес, после этого в исключение, которое гласит

Престол поддерживает типы здесь: http://www.typemock.com/mscorlib-types

Когда вы идете туда, вы увидите:

enter image description here

Заметно отсутствует fr om этот список является классом System.IO.Directory, который, как представляется, не поддерживается TypeMock на момент написания этой статьи. Это строка, вызывающая вашу ошибку.

+0

Так есть ли способ решить это? – user2435880

+0

@ user2435880 Единственный способ, которым я знаю, - создать слой абстракции между вашим кодом и кодом, который идет на диск, как в [Как вы издеваетесь над файловой системой в C# для модульного тестирования?] (Http: //stackoverflow.com/questions/1087351). –

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