使用Typemock在Nunit中模拟IO操作

时间:2013-07-01 13:27:52

标签: c# nunit typemock typemock-isolator nunit-2.5.9

我有以下方法。

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.TypeMockException:    * 在记录块中找不到方法调用。请检查:*您是否想要伪造一块土地而不是财产? *您是否试图假冒不受支持的mscorlib类型?

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果你看一下你得到的异常的最后一个问题,

  

*您是否试图假冒不受支持的mscorlib类型?

在异常中实际上有一个网址,其中包含

  

请在此处查看支持的类型:http://www.typemock.com/mscorlib-types

当你去那里时,你会注意到:

enter image description here

此列表中缺少的是System.IO.Directory类,在撰写本文时似乎不支持TypeMock。这是导致错误的行。