4
我希望能夠正確地測試一個類初始化使用起訂量:起訂量和構造 - 測試初始化行爲
class ClassToTest
{
public ClassToTest()
{
Method1(@"C:\myfile.dat")
}
public virtual void Method1(string filename)
{
// mock this method
File.Create(filename);
}
}
我想我可以使用CallBase
屬性創建一個可測試版然後使用.Setup()
確保Method1()
不執行任何代碼。
但是,創建Mock<ClassToTest>()
不會調用構造函數,如果它做到了,就不會執行Setup()
!
如果這是不可能的,那麼在確保構造函數行爲正確的同時解決問題的最佳方式是什麼?
編輯:爲了使它更清晰,我添加了一個參數Method1()
採取文件名並添加了一些行爲。我想編寫測試將是對以下工作版本:
[Test]
public void ClassToTest_ShouldCreateFileOnInitialisation()
{
Mock<ClassToTest> mockClass = new Mock<ClassToTest>() { CallBase = true };
mockClass.Setup(x => x.Method1(It.IsAny<string>());
mockClass.Verify(x => x.Method1(@"C:\myfile.dat"));
}
在你走下這條路之前,請看看你的設計實踐。不建議在構造函數中調用虛擬方法,因爲它可能會導致難以跟蹤的非常微妙的錯誤。有關詳細信息,請參閱http://stackoverflow.com/questions/448258/calling-virtual-method-in-base-class-constructor。 – 2010-09-08 12:49:12
Method1()在做什麼,你需要模擬? – 2010-09-08 12:49:47
如果可以,請不要在構造函數中調用虛擬方法。如果你不能,你能否粘貼你的測試? – Grzenio 2010-09-08 13:49:49