Microsoft Fakes - 使用自动实现的子对象创建存根

时间:2014-03-13 08:21:44

标签: c# .net stub microsoft-fakes

我想知道,有没有办法制作接口的存根,自动实现此接口的所有属性,特别是当它们是非基类型时。 示例:

public interface TopInterface
{
    int Counter { get; set; }
    SubLevel1Interface ChildObject { get; set; }
    SubLevel1Interface OtherChildObject { get; set; }
}

public interface SubLevel1Interface
{
    string SomeText { get; set; }
    SubLevel2Interface SomeObject { get; set; }
}

public interface SubLevel2Interface
{
    DateTime dateOfMotezumaBirthday { get; set; }
}

当我存根TopInterface类时,所有非stubed属性的默认行为是抛出null。为了我的测试目的,这些属性不能为空。这导致我被迫写了大量的琐碎代码,如:

StubTopInterface someStub = new StubTopInterface
{
    CounterGet = () => 15,
    ChildObjectGet  = () => new StubSubLevel1Interface
    {
        SomeTextGet = () => string.Empty,
        SomeObjectGet = () => new StubSubLevel2Interface(),
    },
    OtherChildObjectGet = () =>  new StubSubLevel1Interface
    {
        SomeTextGet = () => "FooBaal",
        SomeObjectGet = () => new StubSubLevel2Interface(),
    },
};

当Counter - 其他对象的属性不能为null时。如果有一些方法可以写一些像我这样的话,我会很高兴:

StubTopInterface someStub = new StubTopInterface
{
   CounterGet = () => 15,
}

对象的其余部分将自动存根。 有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

如果要更改默认行为,则必须编写代码。除了可用的内容之外,无法自动生成此内容。

保存代码重写的正确方法是将其重构到一个公共位置,比如说你的类/测试初始化​​然后覆盖每个测试用例的行为。