2011-03-10 107 views
0

我知道必須有一種方法來做到這一點......我只是RhinoMocking的新手。如何在Rhino Mockd對象中調用回調函數?

從本質上講,我有下面的類:

class B 
{ 
    private object _dependency; 

    public B(object dependency) 
    { 
      _dependency = dependency; 
    } 

    public void Method() 
    { 
     dependency.DependencyMethod(delegate(){ Method2(); }); 
    } 

    private void Method2() 
    { 
     // do stuff 
    } 
} 

我傳遞嘲笑犀牛,接口在我的測試依賴。我想在我的測試中測試Method2 ......但它是私有的,所以唯一的方法是查看DependencyMethod的參數。我怎麼做? :P

謝謝!

+0

爲什麼要測試一個私有方法?通常,您不會測試私有方法 - 只是公共接口。 – PatrickSteele 2011-03-11 15:21:21

+0

我通常同意......但是在實際上(也就是這個問題的非抽象版本),private Method2是一個異步回調;這是以公開的方式制定的;然後再調用。爲了充分測試我的場景;我需要調用它。 – bryansh 2011-03-13 04:21:58

回答

0

所以,我覺得要做到這一點的最好辦法是在我的模擬中使用GetArgumentsForCallsMadeOn,以這種方式獲取委託,然後調用它。

0

一個測試應該確定Method()傳遞一個委託。 另一個測試應該確定真正的依賴關係調用委託。

要驗證Method()將委託傳遞給Method2,您需要使委託可見。也許你可以四處之後通過這個作爲一個依賴,從而在另一個測試可以驗證方法()把你,你在通過委託。

private object _dependency; 
private delegate_type _delegate; 

public B(object dependency, delegate_type theDelegate) 
{ 
     _dependency = dependency; 
     _delegate= theDelegate; 
} 

public B(object dependency) : this(dependency, delegate(){ Method2(); }) {} 

public void Method() 
{ 
    dependency.DependencyMethod(theDelegate); 
}