如何使用私有构造函数对类进行单元测试?
How to unit test a class with private constructor?
我有一个Foo类。我只想允许 Bar 创建它,所以我将其构造函数设为私有,并使 Bar 成为它的朋友。但是现在我该如何对Foo的公共方法进行单元测试(例如getValue(?我没有办法在单元测试文件中创建它的实例。
class Foo final
{
public:
int getValue();
private:
friend class Bar;
Foo(int value);
};
class Bar
{
protected:
Foo createFoo(int value);
};
您可以为单元测试添加额外的友元类
class Foo final
{
public:
int getValue();
private:
friend class Bar;
friend class UnitTests; // Here
Foo(int value);
};
class UnitTests {
public:
bool constructor_ok() { Foo test_instance(42); ... }
};
有两种可能的方法。
第一种是让单元测试利用Bar
来实例化Foo
,然后对Foo
的公共成员进行测试。 这意味着您的单元测试将Bar
和Foo
结合起来进行工作,这是合适的,因为(大概(您打算将Foo
构造函数设为私有并Bar
朋友是为了防止Foo
单独使用。 根据Bar
的定义方式,您可能需要单独的单元测试来单独执行Bar
(即独立于Foo
(。
第二种选择是将另一个类声明为friend
,然后使用该类独立于Bar
在Foo
上实现测试。
就个人而言,我更喜欢第一种选择。 使用第二个选项,存在Bar
的工作与Foo
单元测试的工作不同步的风险(反之亦然( - 这意味着第二个选项将引入通过单元测试的可能性,然后发布程序与Bar
与Foo
的错误交互。
相关文章:
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 使用 Google Test 对自定义断言函数进行单元测试
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 如何使用私有构造函数对类进行单元测试?
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 使用cmake构建google测试单元测试时出现链接器错误
- 使用外部依赖项运行 VC++ 单元测试时"Failed to set up execution context"
- C++ 使用链接时间替换进行单元测试
- 使用 C++ Boost.Test 组织单元测试?
- 如何使用Boost单元测试框架测试Qt应用程序
- 使用C 单元测试框架集成测试Java应用程序
- 如何使用 Qt 自发关闭事件进行单元测试
- 我想使用 CMake 生成和编译 Visual Studio projet,我需要从构建中排除单元测试文件。有没有办法做到这一点?
- 使用XCtest编写C 单元测试
- 单元测试任务使用 QThreadPool 并行运行
- 使用GTEST进行Arduino单元测试
- c++ Rest SDK和微软单元测试同时使用失败
- 如何在单元测试中使用QTest QBENCHMARK宏结果作为参数
- 在Boost单元测试中使用管道