我正在尝试为需要高性能的MFC应用程序设置Agile和TDD环境。
由于MFC View / Document不可测试,我将尽可能使它们变得愚蠢,并使用Boost Test框架测试其他类。 - 如果您对此环境有更好的方法或更好的测试框架,请告诉我。
为了使TDD工作,我认为依赖注入对于松耦合结构至关重要。我怎样才能做到这一点?任何参考或提示将不胜感激。
答案 0 :(得分:1)
将shared_ptr用于表示类的接口。
我在想像
#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
然后你可以在构造函数中使用clock实现,或者使用另一种方法来设置实现,比如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这样的模拟框架(它们无论如何都需要接口),以及更轻松的资源管理(你永远不会有空指针)。