gpt4 book ai didi

unit-testing - 单元测试 : How to break a local object dependency?

转载 作者:行者123 更新时间:2023-12-04 05:20:30 24 4
gpt4 key购买 nike

我有如下代码:

class B;

class A
{
A()
{
}
bool MethodA()
{
B *pB = new B();
bool bRet = pB->SomeFunction();
// remaining logic;
return bRet;
}
~A(){}
};

我需要为 MethodA 编写测试。所以我认为我需要打破对 B 类的依赖。最好的方法是什么?如果它是一个成员变量,我可以通过构造函数注入(inject)一个 stub 。有没有不涉及生产代码更改的解决方案?如果有必要进行更改,最好的方法是什么?

我使用 NUnit 并且正在这里处理一些非托管代码。请帮忙!

编辑: 我还漏掉了另一个令人头疼的问题! B类是一个C++类,我不应该改变它的实现。 A 类在 C++/CLI 中,它充当 B 的包装器。所以我认为这抑制了 B 的接口(interface)的可能性,因为我不能接触 B。

最佳答案

没有。没有不包括更改该设计的解决方案,主要是因为该设计不好。 A 和它的依赖 B 是紧密耦合的,这在面向对象编程方面变得很糟糕:你需要反转依赖的控制。测试只是该设计不好的原因之一,但不是唯一的原因。可移植性、灵 active 、关注点分离等等。

使其可测试并使其变得更好的最佳方法(唯一好的方法)是依赖注入(inject)。您需要使用构造函数(将 B 的接口(interface)作为参数)或 setter 将 B 注入(inject) A。并且无论谁控制 A(并执行 new A()),都应该将依赖项 B 传递给它(new A(new B()),或 A。 setB(新 B())).

完成后,对该方法进行单元测试将变得非常容易。

关于unit-testing - 单元测试 : How to break a local object dependency?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7648774/

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