gpt4 book ai didi

c++ - VC++ 平台的 TDD 和 DI

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:58 24 4
gpt4 key购买 nike

我正在尝试为需要高性能的 MFC 应用程序设置敏捷和 TDD 环境。

由于 MFC View/Document 是不可测试的,我打算让它们尽可能地笨,并使用 Boost Test 框架测试其他类。 - 如果您知道此环境的更好方法或更好的测试框架,请告诉我。

为了使 TDD 工作,我认为依赖注入(inject)对于松耦合结构至关重要。我怎样才能做到这一点?任何引用或提示将不胜感激。

最佳答案

将 shared_ptr 用于代表您的类的接口(interface)。

我在想类似的东西

#ifndef CLOCK_HPP_INCLUDED
#define CLOCK_HPP_INCLUDED

#include <boost/shared_ptr.hpp>


class Clock
{
public:
static boost::shared_ptr<Clock> create();
virtual void init() = 0;
virtual double getSeconds() = 0;
virtual void sleepUntilNext(double howMuch) = 0;

protected: // No polymorphic deconstruction because of shared_ptr
~Clock()
{}


};

#endif

然后您可以在构造函数中采用时钟实现,或者使用其他方法来设置实现,例如 setClock 或其他方法。

这方面的例子是

#include "clock.hpp"
class MyClass
{
public:
myClass(boost::shared_ptr<Clock> aClock) : myClock(aClock)
{
myClock.init();
}

private:
boost::shared_ptr<Clock> myClock;
}

然后在你的单元测试中你可以做这样的事情:

boost::shared_ptr<Clock> mock = createMockClock();
MyClass b(mock);

mock.assertThatInitIsCalled();

您也可以忽略资源。 shared_ptr 将自行删除。

这样做的代价是由于动态分配、虚函数调用和 shared_ptr 的开销而造成的性能损失。

好处是增加了模块化,缩短了编译时间,更容易使用像 googlemock 这样的模拟框架(无论如何它们都需要接口(interface)),以及更容易的资源管理(你永远不会有空指针)。

关于c++ - VC++ 平台的 TDD 和 DI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8542473/

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