2011-03-10 82 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); 
}