测试c++;通过TDD的控制台输出 我用测试驱动开发方法编写C++程序。 我有一个使用控制台输出的函数。 我想编写一个测试,它能够测试控制台输出是否与预期输出相同。 我看到这是可以解决的,应该检查一下。但我在论坛中看到的解决方案不是C++,而是其他语言。我想它也可以用C++来做。

测试c++;通过TDD的控制台输出 我用测试驱动开发方法编写C++程序。 我有一个使用控制台输出的函数。 我想编写一个测试,它能够测试控制台输出是否与预期输出相同。 我看到这是可以解决的,应该检查一下。但我在论坛中看到的解决方案不是C++,而是其他语言。我想它也可以用C++来做。,c++,unit-testing,boost,console,tdd,C++,Unit Testing,Boost,Console,Tdd,任何提示都会大有帮助。不要直接向控制台写入;写入提供给函数的流 测试可以提供一个stringstream,并从中提取输出。一个真正的程序可以提供cout(或其他)来获得真正的输出 一般来说:编写与抽象接口交互的代码,抽象接口可以模拟用于测试,而具体实现则不能。我可以就使代码可测试的一般方法向您提供建议:您可以做的事情是将输出流作为参数传递给您的单元,因此,在测试设置中,您可以通过一个,您可以对其进行检查,在生产设置中,标准输出…定义“使用控制台输出”。我对最关键方面的含糊不清投了反对票。根据OP

任何提示都会大有帮助。

不要直接向控制台写入;写入提供给函数的流

测试可以提供一个
stringstream
,并从中提取输出。一个真正的程序可以提供
cout
(或其他)来获得真正的输出


一般来说:编写与抽象接口交互的代码,抽象接口可以模拟用于测试,而具体实现则不能。我可以就使代码可测试的一般方法向您提供建议:您可以做的事情是将输出流作为参数传递给您的单元,因此,在测试设置中,您可以通过一个,您可以对其进行检查,在生产设置中,标准输出…

定义“使用控制台输出”。我对最关键方面的含糊不清投了反对票。根据OP中“使用控制台输出”的含义,这可能是已经做过的,也可能是完全不现实的(例如使用ncurses)。我们需要一些澄清。正如最初提出的那个样,这是一个糟糕的问题。@Cheersandhth.-Alf:OinDect,如果它使用的不是流,那么您需要提供一个不同的抽象。但原理是一样的:与抽象接口交互,抽象接口可以被测试模仿,而不是与具体实现交互,具体实现不能。我的意思就是这样。非常感谢。