vc++平台的TDD和DI
TDD and DI for VC++ platform
我正在尝试为需要高性能的MFC应用程序设置敏捷和TDD环境。
由于MFC视图/文档是不可测试的,我将使他们尽可能愚蠢,并测试其他类与Boost测试框架。-请让我知道,如果你知道更好的方法或更好的测试框架,这种环境。
为了使TDD工作,我认为对松散耦合结构进行依赖注入是至关重要的。我怎样才能做到这一点呢?如有任何参考或提示,我们将不胜感激。
使用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
那么你可以在构造函数中使用时钟实现,或者使用其他方法来设置实现,比如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这样的模拟框架(它们无论如何都需要接口),更容易管理资源(您永远不会有空指针)。
相关文章:
- 用于系统程序的 TDD
- DI 加速 C++14 和动态容器
- 使用TDD时隐藏文件访问实现详细信息
- 将 boost-di 与配置文件和共享库一起使用
- [BOOST] .DI装饰器图案
- 在FTDI 2232H迷你模块上使用GPIO输入而不是TDO/DI
- Visual Studio TDD Project的代码覆盖工具
- TDD:确定地测试成员初始化,给定C++中未定义的行为
- 通过TDD测试C 控制台输出
- 在一个DFS中查找Di-Graph中的强烈连接组件
- 常见问题TDD与模拟
- TDD让我除以零.可以吗
- 如何使用 C++ 在 Xcode 上成功执行 TDD
- 使用TDD进行食人魔游戏编程
- vc++平台的TDD和DI
- c++中的TDD.如何测试private类的好友函数
- 栈分配RAII对象vs DI原则
- Ubuntu16.04 在崇高的文本中运行 pcl 3, "fatal error: usr/include/pcl-1.7/pcl/point_types.h: No such file or di
- 哪个C++IDE支持快速TDD工作流程和Google或Boost测试框架
- 单元测试-在C++TDD中调用重载常量与非常量方法的好方法