我的WidgetDoer
课程取决于Foo
,但未注入。我需要伪造_foo
DoStuffWith()
的实现(然后验证Do()
返回结果 - 这是我实际代码的简化表示。)
public class WidgetDoer {
readonly Foo _foo;
public WidgetDoer() {
_foo = new Foo();
}
public Bar Do(Widget widget) {
var result = _foo.DoStuffWith(widget);
return result;
}
}
我尝试使用以下Isolator语法来阻止创建真正的Foo
对象(在WidgetDoer()
构造函数内),但实际上Foo
对象被实例化了:
var fooFake = Isolate.Fake.Instance<Foo>();
Isolate.WhenCalled(() => new Foo()).WillReturn(fooFake);
我可以使用Typemock来模拟未注入的依赖项吗?
答案 0 :(得分:4)
这段代码允许我模拟耦合依赖:
Isolate.Swap.NextInstance<Foo>().With(FooFake);
答案 1 :(得分:2)
声明我在Typemock工作。
交换实例现在已经过时了。 您可以使用:
var fakeFoo = Isolate.Fake.NextInstance<Foo>();
fakeFoo是代码中_foo的代理。
您也可以使用:
var fakeFoo = Isolate.Fake.AllInstances<Foo>();
这里,fakeFoo是从这一行创建(新)的所有Foo实例的代理。
这两个示例都在一个命令中创建了伪和“交换”。
答案 2 :(得分:0)
首先,在使用TypeMock Isolatar API时,我强烈建议您将此PDF文件放在身边:TypeMock Isolator API Quick Reference(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);
这会将所有未来的对象创建与假交换。如果您正在查看可能不太明显对象创建次数的代码,这非常有用。