【发布时间】:2017-08-08 17:19:14
【问题描述】:
我编写了一个类来枚举操作系统的物理显示器,检索它们的信息和功能。实际上,我想测试这个类是否能正常工作并总体上接受(单元)测试。
但是,我不知道如何测试这个类。抛开实现细节不谈,基本上是这样定义的:
class VideoMode {
public:
int64 width;
int64 height;
std::vector<int64> frequencies;
}
class Display {
protected:
std::vector<VideoMode> modes_;
std::string display_name_;
std::string adapter_name_;
bool primary_;
public:
Display(char* osDevName, char* osAdapterDevName);
// typical getters
}
我将如何测试高度集成并依赖于操作系统和物理连接的硬件的东西。我知道为这样的课程编写单元测试很困难,那么我有什么替代方案?
【问题讨论】:
-
并非所有内容都可以进行单元测试。如果有太多的外部依赖项(你不能以一种明智的方式存根),你必须适应其他测试——比如黑盒测试、集成测试、手动测试。悲伤但真实.. 有时尝试对“所有事物”进行完美测试是令人钦佩的,但不值得投资回报 - 记住要现实和务实。
-
您只需要测试针对
char* osDevName和char* osAdapterDevName的类以及背后的框架。我会尝试为osAdapterDev提供一个模型,并检查所有函数是否按预期调用。 -
@DanielH,类在构造后如何更改
adapater_name_和display_name_的值?它是否支持基于变化环境的动态重新配置?如果不是,那么这个论点就没有实际意义。至于vector,并将迭代器返回给它,这不是最聪明的主意。除非您真的 提供大多数矢量查询 API(大小、正向/反向迭代器等),但这超出了“普通 getter”。此外,提供std::vector<>::iterator作为 API 的一部分与提供std::vector<>并没有太大区别,就好像您考虑一下一样。情况更糟。 -
无论 getter 是做什么用的,以及类是如何派生的,都与这个问题的范围无关。
-
@DanielH,我大声而自豪地说 - 琐碎的设置者和获取者是无用的,纯粹的邪恶。
标签: c++ unit-testing testing