1
我有下面的代碼剪斷,我試圖用typemock測試它,但得到了InvalidCast異常。 ISomeClass只是一個接口,SomeClass實現了這個接口。 UseOfSomeClass是另一個使用SomeClass的類,其構造函數以SomeClass作爲參數。我需要測試UseOfSomeClass。如何將typemock假對象注入到類構造函數中?typemock扔InvalidCast異常
public interface ISomeClass
{
void DoSomething();
}
public class SomeClass : ISomeClass
{
public void DoSomething()
{
Console.WriteLine("Do something!");
}
}
public class UseOfSomeClass
{
public SomeClass SomeClassProperty { get; set; }
public bool IsChecked { get; set; }
public UseOfSomeClass(SomeClass someClass)
{
SomeClassProperty = someClass;
}
public void MyMethod()
{
SomeClassProperty.DoSomething();
IsChecked = true;
}
}
然後測試:
[TestClass]
public class UseOfSomeClassTest
{
[TestMethod]
public void TestMethod1()
{
var fakeSomeClass = Isolate.Fake.Instance<ISomeClass>();
var use = new UseOfSomeClass((SomeClass)fakeSomeClass);
use.MyMethod();
Assert.IsTrue(use.IsChecked);
}
}
謝謝!
難道你不應該嘲笑'SomeClass'而不是'ISomeClass'嗎? –
是的。如果我嘲笑SomeClass,它工作正常。但爲什麼我不應該嘲笑ISomeClass?或者什麼時候應該模擬一個接口,以及什麼時候模擬一個具體的類? – iceheart
如果類構造函數需要'SomeClass',則需要模擬'SomeClass'。如果它需要一個'ISomeClass',你需要模擬'ISomeClass'。通常,當你進行依賴注入時,你應該更改'UseOfSomeClass'來接受構造函數中的'ISomeClass'而不是'SomeClass'。實際上,你不應該有類似於類的接口,它應該代表類實現的合約。 –