MS Fakes,将参数传递给构造函数

时间:2015-09-02 08:15:11

标签: c# microsoft-fakes shim

我有以下具体课程

public class Service
{
    private IRepository _rep;

    public Service(IRepository rep)
    {
        _rep() = rep;
    }

    public Boolean Foo(Int32 param1)
    {
        _rep.Foo(param1);
    }

    public void Bar()
    {
        _rep.Bar();
    }
}

我为它创建了以下垫片。

    using (ShimsContext.Create())
    {
        ShimService shimService = new ShimService()
        {
            FooInt32 = (param1) => { return true; },
        };
    }

我希望foo始终返回true。这很有效。

我希望Bar正常运作。这不起作用。

当我调试_rep为null时,我相信我需要将这个IRepository传递给Shims构造函数,但我无法弄清楚如何去做。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。你必须创建一个你想要Shim的服务实例,其中包括注入IRepository并将该服务传递给Shim .....所以

            IRepository rep = new Repository();
            Service service = new Service(rep);
            ShimSignOffService shimService = new ShimSignOffService(service)
            {
                IsBookmarkProcessedInt32 = (bookmarkId) => { return true; },

            };