2012-04-16 58 views
2

我想嘲笑System.IO.FileInfo.Extension方法,让它返回是“.xls”,但我不能得到任何工作模拟混凝土FileInfo对象

This Example的伟大工程删除,但不是扩展(代码将无法编译)

我一直在使用这个example也试过,但代码是错误的。

  • 我JustMock
  • 完全许可副本
  • 我使用VS 2010的.NET 4.0

编辑: 我知道我可以设置一个界面和测试方式,但付费版JustMock应该模拟具体的课程。既然我付了钱,我想知道怎么做。

回答

1

随着JustMock的最新版本(2012年第二季度)。您不再需要MockClassAtriibute来模拟MsCrolib成员。

您可以通过以下方式上面写的测试非常:

[TestClass] 
public class UnitTest1 
{ 
     [ClassInitialize] 
     public static void Init(TestContext context) 
     { 
      Mock.Replace<FileInfo, string>(x=> x.Extension).In<UnitTest1>(); 
     } 


     [TestMethod] 
     public void ShouldAssertFileInfoExtension() 
     { 
      var fileInfo = Mock.Create<FileInfo>(Constructor.Mocked); 

      string expected = "test"; 

      Mock.Arrange(() => fileInfo.Extension).Returns(expected); 

      Assert.AreEqual(fileInfo.Extension, expected); 
     } 
} 
0

这听起来像你只是需要将该依赖关系抽象为另一个包装类,然后它会很容易嘲笑。

public class FileInfoAbstraction 
{ 
     protected FileInfo _fileInfo = null; 

     public virtual string Extension 
     { 
      get { return _fileInfo.Extension; } 
     } 

     public FileInfoAbstraction(string path) 
     { 
      _fileInfo = new FileInfo(path); 
     } 
} 

然后,无论你是使用FileInfo类,插入您的抽象:

var myFileInfo = new FileInfoAbstraction(somePath); 

由于延长现在被标记为虚,最嘲讽的框架就能够对其进行修改。

+0

是的,我想和你@Tejs同意和我已经做了,在过去,但我被告知,JustMock会嘲笑具体类和想要使用具体类 – 2012-04-16 15:59:11

+0

也许,但我发现无论如何将这些硬依赖关系提取到自己的类中会更好。此外,您可能需要使用工厂模式来移除代码中的'new'调用,以使其更易于进行单元测试。 – Tejs 2012-04-16 16:02:25

1

想我是缺少一个属性

[TestClass, MockClass] // **MockClass Added** 
public class UnitTest1 
{ 
     [ClassInitialize] 
     public static void Init(TestContext context) 
     { 
      Mock.Partial<FileInfo>().For<FileInfo, string>(x => x.Extension); 
     } 


     [TestMethod] 
     public void ShouldAssertFileInfoExtension() 
     { 
      var fileInfo = Mock.Create<FileInfo>(Constructor.Mocked); 

      string expected = "test"; 

      Mock.Arrange(() => fileInfo.Extension).Returns(expected); 

      Assert.AreEqual(fileInfo.Extension, expected); 
     } 

} 
+0

很好,谢谢你与我们分享答案! – 2012-04-18 13:06:46