2012-09-02 149 views
1

我嘗試了一些單元測試,並遇到了使用類實例而不是接口的測試方法的問題。在那種情況下,我發現MS莫爾斯可以幫助我。但看起來他們對於類型轉換的情況並不友善。我發現沒有任何信息,甚至沒有問題如何處理這種情況。例如:微軟莫爾斯和類型鑄造

public class ClassA 
{ 
public int Number {get {return 10;}} 
} 

public class ClassB 
{ 
public int Count1(ClassA arg) { return arg.Number; } 
public int Count2(object arg) { return (arg as ClassA).Number; } 
} 

,並在測試

var cl = new MolesUnitTesting.Moles.MClassA(); 
MolesUnitTesting.Moles.MClassA.AllInstances.NumberGet = t1 => 20; 

第一Count作品只是罰款,並返回20,但在第二個返回Null鑄造。有什麼方法可以在不使用接口和通常嘲諷的情況下測試這種方法嗎?如果有其他的lib可以幫助我,請給我提供它的名字。

回答

0

而是嘲諷ClassA類型,你可以做以下的所有實例:

var target = new MClassA(); 

target.NumberGet =() => 42; 

Assert.AreEqual(Count1(target), 42); 
Assert.AreEqual(Count2(target.Instance), 42); 

注意,對於Count1您可以直接使用痣,因爲它會自動轉換爲ClassA實例。但是,由於Count2收到object,您需要明確並通過target.Instance,這代表了Moment ClassA實例。

原因Count1(target)作品是因爲生成的摩爾類MClassA,它從MoleBase<ClassA>繼承,定義了下面的操作者的隱式:

public static implicit operator ClassA(MoleBase<ClassA> mole) { // ... } 
+0

感謝。此前我也嘗試使用Moled類中的實例,但它將原始值返回給我,但現在一切正常。對我來說似乎很神奇。 – Ritro