我只是不知道如何模拟一个情况来测试这个。我真的应该在文件系统上创建一个文件吗?

public static void DeleteIfExists(this FileInfo fileInfo)
{
   if (fileInfo.Exists)
   {
      fileInfo.Delete();
   }
}

最佳答案

我会使用一个模拟框架,比如 RhinoMocks

[Test]
public void ShouldDeleteAFileWhenItExists()
{
    var mockInfo = MockRepository.GenerateMock<FileInfo>();
    mockInfo.Expect( i => i.Exists ).Return( true ).Repeat.Once();
    mockInfo.Expect( i => i.Delete() ).Repeat.Once();

    var extensions = new FileInfoExtensions();

    extensions.DeleteIfExists( mockInfo );

    mockInfo.VerifyAllExpectations();
}

[Test]
public void ShouldNotDeleteAFileWhenItDoesNotExist()
{
    var mockInfo = MockRepository.GenerateMock<FileInfo>();
    mockInfo.Expect( i => i.Exists ).Return( false ).Repeat.Once();
    mockInfo.Expect( i => i.Delete() ).Repeat.Never();

    var extensions = new FileInfoExtensions();

    extensions.DeleteIfExists( mockInfo );

    mockInfo.VerifyAllExpectations();
}

其他有关 Delete 何时引发异常的测试等。

关于c# - 如何对这个 C# 扩展方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5366426/

10-11 01:28