2012-10-09 61 views
0

我有一個類,看起來像這樣:使用微軟的工廠實例方法假貨

public class MyClass 
{ 
    int myNum; 

    private MyClass() {} 

    public static MyClass CreateInstance() 
    { 
     MyClass a = new MyClass(); 
     a.myNum=5; 
     return a; 
    } 

    public bool IsBigger(MyClass b) 
    { 
     return this.myNum > b.myNum; 
    } 

}

然後,我想讓它的一個墊片,並希望使用IsBigger的方法,但默認情況下它返回false。我如何在這種情況下調用基本方法?

測試是這樣的:

[TestMethod] 
Public void test() 
{ 
ShimMyClass firstShim = new ShimMyClass(); 
firstShim.myNumGet =() => { return 6; } 

ShimMyClass secondShim = new ShimMyClass(); 
secondShim.myNumGet =() => { return 7; } 

Assert.IsTrue(secondShim.Instance.IsBiggerThan(firstShim.Instance); 
} 
+1

顯示如何你打電話給th e IsBigger方法。你用鹼基方法是什麼意思?在我看來沒有基礎方法... – Abbas

+0

我比單元測試我創建一個墊片實例,並將myNum設置爲其他數字。比我打電話給firstShimMyClass.Instance.IsBiggerThan(otherShimClass),但即使我沒有執行它,它也會返回 – Lironess

回答

0

讓myNum的一個屬性:

public class MyClass 
{ 
    public int MyNum { get; private set; } 

    private MyClass() {} 

    public static MyClass CreateInstance() 
    { 
     MyClass a = new MyClass(); 
     a.MyNum=5; 
     return a; 
    } 

    public bool IsBigger(MyClass b) 
    { 
     return this.MyNum > b.MyNum; 
    } 

} 

使用ShimMyClass之前創建沉語境:

using (ShimsContext.Create()) 
{ 
    ShimMyClass firstShim = new ShimMyClass(); 
    firstShim.MyNumGet =() => { return 6; } 

    ShimMyClass secondShim = new ShimMyClass(); 
    secondShim.MyNumGet =() => { return 7; } 

    Assert.IsTrue(secondShim.IsBiggerThan(firstShim); 
} 

Microsoft Fakes on MSDN

+0

從外面。可以說我可以改變它。它只是一個示例類。 – Lironess

+0

你試過調試過嗎? 因爲我沒有看到你的樣本班有問題! 你如何從外部設置它?在示例中它是私人 – oberfreak

+0

更新後的代碼.. – Lironess