是否有可能在犀牛模拟中做某种形式的期待。
示例:
public void ToBeTested()
{
ClassForExmaple classForExample = new ClassForExample();
//Other logic.....
}
所以我希望我的单元测试调用ToBeTested(),但是当调用新的ClassForExample时,我希望它返回一个模拟版本。
答案 0 :(得分:1)
我没有使用Rhino mock,我不确定这是否是RhinoMock支持的东西,但是对象的创建控制嵌入在方法中的事实违反了DI / IOC的原则,因此是更难测试..理想情况下,类应该通过包含类的构造函数或方法本身注入到方法中。
因此
class A
{
IClassForExample _classForExample;
public A(IClassForExample classForExample)
{
_classForExample=classForExample;
}
public void ToBeTested()
{
var classForExample = _classForExample;
//Other logic.....
}
}
RhinoSupport是否扩展了非抽象/接口类 - 我不确定这个问题,但我确信它可以模拟接口。
答案 1 :(得分:0)
不,这是不可能的,出于同样的原因,你不能指望static
事情:它不会在实例上被调用。
如果你想对你测试过的代码中构建的对象使用mock,你应该有这样的东西:
internal virtual ClassForExample NewClassForExempe()
{
return new ClassForExample();
}
然后在测试中模拟此方法。
注意:假设您在类的InternalsVisibleToAttribute中声明了rhino mocks,我将该方法设置为内部。否则你将不得不公开。