Typemock Isolator:如何模拟未注入的依赖项?

4

我的WidgetDoer类依赖于未注入的Foo。我需要伪造_fooDoStuffWith()实现(然后验证Do()返回结果——这是我的真实代码的简化表示)。

public class WidgetDoer {
    readonly Foo _foo;

    public WidgetDoer() {
        _foo = new Foo();
    }

    public Bar Do(Widget widget) {
        var result = _foo.DoStuffWith(widget);
        return result;
    }
}

我尝试使用以下隔离器语法来防止在 WidgetDoer() 构造函数中创建一个真正的 Foo 对象,但是真正的 Foo 对象仍然被实例化了:

var fooFake = Isolate.Fake.Instance<Foo>();
Isolate.WhenCalled(() => new Foo()).WillReturn(fooFake);

我可以使用Typemock来模拟并非注入的依赖关系吗?

3个回答

4

2

声明:我在Typemock工作。

替换实例现在已经过时了。 你可以使用以下方法:

var fakeFoo = Isolate.Fake.NextInstance<Foo>();

fakeFoo是您代码中_foo的代理。

您还可以使用:

var fakeFoo = Isolate.Fake.AllInstances<Foo>();

这里的fakeFoo是一个代理,代表从该行代码开始创建(new)的所有Foo实例。

这两个示例都创建了一个假的对象,并在一条命令中进行了"交换"。


0

首先,在使用TypeMock Isolator API时,我强烈建议您将这个PDF放在身边:TypeMock Isolator API快速参考(PDF)

关于上面的观点,是的,我发现创建一个虚拟对象并不意味着它会被使用。正如你上面指出的那样,为了使用它,你必须做一些像这样的事情:

Isolate.Swap.NextInstance<Foo>().With(FooFake);

这将交换下一个实例。我相信你也可以这样做:

Isolate.Swap.NextInstance<Foo>().With(FooFake);
Isolate.Swap.NextInstance<Foo>().With(FooFake2);

这将使用FooFake实例交换下一个对象创建,然后使用FooFake2交换下一个对象创建

你也可以这样做:

Isolate.Swap.AllInstances<Foo>().With(FooFake);

这将用假对象交换所有未来的对象创建。如果您正在查看可能不明显有多少次对象创建发生的代码,这非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接