目前我正在iOS上使用C ++开发OpenGL ES 1.0相关项目。
我找不到顺畅地整合任何单元测试框架来在这个特定设置上进行TDD的方法。
工作环境:
我试过googletest,但是为了让googletest工作,我应该能够创建命令行应用程序, 但由于我使用的是OpenGL ES 1.0,我无法将它们真正导入Mac上的命令行应用程序。
我尝试了一种名为catch的新方法,但我不知道如何与Xcode集成。
任何人都有解决这个问题的好方法吗?
答案 0 :(得分:0)
这就是我进行TDD编程的方法。首先,我建立了我需要添加的新功能,然后我建立了此功能将具有的所有外部依赖项。例如,我在当前项目中依赖于c api,它提供了有关我正在使用的模型的信息。我也依赖于命令行,因为客户端可以输入我必须响应的命令。这个命令行是通过一个特殊的终端,我不感兴趣的细节。
因此,我为这些外部依赖项创建了接口类,然后我在代码中仅使用这些接口。因此,在进行测试时,我不需要模型的c ++库或终端的c ++库(稍后会详细介绍)。以下是用于写入命令行的接口示例:
class ICommandLineOutput
{
public:
virtual void WriteLine(std::string&) = 0;
};
所以我要说我要写一个将时间写入命令行的类,叫做WriteTime。然后,我要做的是将类型为 ICommandLineOutput 的对象传递给此类构造函数,并仅使用此接口。我不关心我正在使用什么样的命令行,只关心它的界面。然后我可以使用我想要的任何命令行类,只要它具有ICommandLineOutput类作为其基础。
class WriteTime
{
public:
explicit WriteTime(ICommandLineOutput commandLine): _commandLine(commandLine){}
...
};
因此,在单元测试时,我将有一个单独的C ++项目,我将在其中测试我编写的每个类。该项目可以使用Google Test,它可以是一个命令行项目。因此,即使您正在编写GUI C ++项目中包含的GUI应用程序,测试也有自己的项目。
让我们说我希望测试我的类,它将时间写入命令行。我将在一个名为TestWriteTime的类中执行此操作。我将使用GoogleMock创建ICommandLineOutput接口的模拟。然后可以通过测试基础在测试中询问和/或配置模拟,以便确定WriteTime是否按预期行为。例如,我可以检查WriteLine()被调用的次数以及它接收的参数。
最后,在我目前的项目中,我正在使用一个基于linux的项目,该项目具有大量的依赖项。该应用程序也需要很长时间才能启动。但是,我有一个Windows控制台项目,我在其中进行测试。该应用程序在少于一秒的时间内执行,这对于TDD来说是理想的。