在为方法生成存根时避免返回类型的实例构造

时间:2016-03-07 13:30:04

标签: rhino-mocks

我在尝试使用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());
}

0 个答案:

没有答案