Moq c#私有方法抛出异常

rad*_*scu 0 c# unit-testing moq private-methods

鉴于此类:

public class MyClass 
{  
     private void MyMethod()  
     {  
         //...
     }  

     public void Execute()
     {  
        try
        {
             //...  
             MyMethod();  
             //... 
        }  
        catch(Exception e)  
        {  
            ...  
        }   
     }  
}
Run Code Online (Sandbox Code Playgroud)

我怎么能模拟MyMethod扔一个OutOfmemoryException

编辑1:

鉴于MyMethod从数据库加载一些数据的下一种情况,以及发生一些不可预测的错误,MyMethod将引发异常.我希望能够对这种情况进行单元测试.在我的例子中,execute方法的catch子句.

Jon*_*eet 6

我不使用起订量,所以它可能是有一些方法可以做到这一点-但我认为,如果你需要,你正在做的嘲讽错.

你通常应该嘲笑依赖 - 你不能依赖你试图测试的班级的私人成员,对吗?通常我会模拟一个接口 - 偶尔它可以用来模拟一个类,但我通常不会.如果你正在调用某个依赖项并且你希望该调用的结果是一个OutOfMemoryException,那么只需使该公共调用抛出异常即可.

如果您觉得自己有理由想要模拟私有方法,请提供有关您的上下文的更多详细信息.

  • @TomTom:如果我正在测试类的实现细节,我不会模拟*那个类*.请注意,我特别谈到了*private*方法.我对模拟*内部*方法的想法没有任何问题,这些方法是依赖关系的一部分.如果你说有很好的理由来模拟*internal*方法,我已经同意 - 至少是抽象类的内部虚方法. (2认同)