2012-04-16 57 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