gpt4 book ai didi

c# - 没有 IoC 或依赖注入(inject)的模拟

转载 作者:可可西里 更新时间:2023-11-01 08:19:54 26 4
gpt4 key购买 nike

有没有一种方法可以在单元测试中使用 mock 或 fakes 而不必使用依赖注入(inject)或反转或控制?

我发现此语法可与 TypeMock Isolator ( http://learn.typemock.com/) 一起使用。虽然它是一个商业产品,所以我希望其他框架(例如 RhinoMocks)会在某个阶段引入这样的语法。

/// Can mock objects WITHOUT DEPENDENCY INJECTION.

var hand = Isolate.Fake.Instance<Hand>();
var mouth = Isolate.Fake.Instance<Mouth>();
Isolate.Swap.NextInstance<Hand>().With(hand);
Isolate.Swap.NextInstance<Mouth>().With(mouth);
...
//notice we're not passing the mocked objects in.
var brain = new Brain();
brain.TouchIron(iron);
...

这种语法非常吸引我,它自动发生。我们可以在那里创建一个大脑,而无需传入任何必需的依赖项,模拟框架将自动用依赖项替换模拟对象。任何人在其他地方见过这种类型的东西吗?

brain 类构造函数现在使用上述语法如下所示,

public Brain()
{
_hand = new Hand();
_mouth = new Mouth();
}

依赖注入(inject)示例看起来像这样,

public Brain(IHand hand, IMouth mouth)
{
_hand = hand;
_mouth = mouth;
}

谢谢。

最佳答案

如果您有选择,您应该几乎总是公开一个构造函数以允许注入(inject)依赖项。您仍然可以保留方便的构造函数(尽管有些人会争辩说您不应该这样做):

public Brain() : this(new Hand(), new Mouth()) { }

也就是说,除了 Isolator 之外,您还可以查看最新版本的 Pex ( 0.17 ),其中包括 moles提供类似于 Isolator 的 Swap 的机制。

关于c# - 没有 IoC 或依赖注入(inject)的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1564176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com