我在尝试使用Rhino Mocks返回抽象类实例的mock方法时遇到了问题。问题是在创建存根时调用了MammalBase构造函数,我想避免这种情况。所有相关源代码都被锁定以进行编辑,只能更改测试。
最终,基类在构造函数中按类型属性处理某些内容,如果未检测到足够的属性,则抛出异常。这导致广泛的日志记录。 我希望从测试中删除不必要的日志。
在创建存根时创建代理时,是否可以指示Rhino Mocks不实例化返回类型(MammalBase)?
是否可以为返回值显式属性或类型设置,而Rhino为具有抽象类实例的方法创建存根作为返回类型?
如果没有创建存根方法返回接口,是否可以避免构造函数?
如果出现以下情况,我发现该问题不存在:
1. Stubbed方法返回类似MammalBase [],
的数组
2. Stubbed方法返回派生类,如" Human"首先,因为不再调用基类的构造函数。
提前致谢!
(代码示例)
public interface IDetermineMammalByType
{
MammalBase DetermineMammalByType(MammalBase creature);
}
public abstract class MammalBase
{
protected MammalBase()
{
CustomAttribute[] attributes = (CustomAttribute[])Attribute.GetCustomAttributes(this.GetType(), typeof(CustomAttribute));
if (!attributes.Any(x=> x as CustomAttribute != null))
{
//This causes issue
throw new Exception();
}
}
}
[CustomAttribute()]
public class Human : MammalBase { }
[System.AttributeUsage(System.AttributeTargets.Class |
System.AttributeTargets.Struct)]
public class CustomAttribute : System.Attribute
{
public CustomAttribute() { }
}
public class MammalDetector : IDetermineMammalByType
{
public MammalBase DetermineMammalByType(MammalBase creature)
{
//Some logic
return null;
}
}
//TEST
[TestMethod()]
public void DetermineMammalByTypeTest()
{
IDetermineMammalByType myTest = MockRepository.GenerateStub<IDetermineMammalByType>();
var creature = new Human();
//Here it fails while mocking method
myTest.Stub(x => x.DetermineMammalByType(creature)).Return(new Human());
}