gpt4 book ai didi

c# - 最小起订量与 Unity 容器单元测试

转载 作者:行者123 更新时间:2023-11-30 13:36:33 24 4
gpt4 key购买 nike

下面是我尝试进行单元测试的生产代码示例。我正在努力解决对正在使用的具体类的依赖。

public MyClass(IUnityContainer container)
{
this.unityContainer = container;
}

public string DoWork()
{
var sender = unityContainer.Resolve<IInterface>(); // how to setup this object
var json = sender.Send("something");
var value = serializer.Deserialize<SomeModel>(json);
return value.url;
}

我想模拟此方法使用的 IInterface。我如何在我的单元测试代码中设置它?我觉得这里缺少一些东西。这有一种反模式的味道......

最佳答案

这是 "service locator" antipattern ,您将依赖项注入(inject)容器/控制反转注入(inject)到您的逻辑中。

您应该改为传递它所依赖的IInterface,以便您控制它可以获得哪些实例。参见 Dependency Injection container in constructor .

如果您无法重构类,则必须在单元测试中注入(inject)容器。设置容器以返回 IInterface 的实例(或者更确切地说,模拟)。像这样:

public void MyUnitTest()
{
IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<IInterface, YourInstance>();

MyClass classUnderTest = new MyClass(myContainer);
classUnderTest.DoWork();

Assert...
}

参见 How to use Unity.RegisterType with Moq?模拟 YourInstance

关于c# - 最小起订量与 Unity 容器单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32484122/

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