abh*_*ash 46 c# tdd rhino-mocks mocking
是否可以使用Rhino.Mocks模拟静态方法?如果Rhino不支持这个,是否有一种模式或某种东西可以让我做到这一点?
Jud*_*ngo 71
是否可以使用Rhino.Mocks模拟静态方法
不,这是不可能的.
TypeMock可以这样做,因为它利用CLR分析器来拦截和重定向调用.
RhinoMocks,NMock和Moq不能这样做,因为这些库更简单; 他们不使用CLR分析器API.它们更简单,因为它们使用代理来拦截虚拟成员和接口调用.这种简单性的缺点是它们无法模拟某些事物,例如静态方法,静态属性,密封类或非虚拟实例方法.
Ste*_*idi 17
如果您无法使用TypeMock拦截方法调用,则建议使用的模式是创建一个代理,该代理转发到您要测试的非虚拟或静态方法,然后在代理上设置期望.为了说明,请考虑以下类.
class TypeToTest
{
public void Method() { }
}
interface ITypeToTest
{
void Method();
}
class TypeToTestProxy : ITypeToTest
{
TypeToTest m_type = new TypeToTest();
public void Method() { m_type.Method(); }
}
Run Code Online (Sandbox Code Playgroud)
通过创建此代理,您现在可以使用ITypeToTest代替传递的位置或设置TypeToTest实例,确保默认实现使用TypeToTestProxy它转发到实际实现.然后,您可以ITypeToTest在测试代码中创建模拟并相应地设置期望.
请注意,创建这些代理可能非常繁琐,容易出错且耗时.为了解决这个问题,我维护了一个库和一组工具,可以为您生成包含这些类型的程序集.有关更多信息,请参阅此页面.
| 归档时间: |
|
| 查看次数: |
28936 次 |
| 最近记录: |