模拟单位测试用例所需的类更改
Class changes required for mocking for Unit Test Cases
我们有一个具有实现线程的方法的类:
class ThreadPool
{
//Thread creation and invocation
int Create();
};
另一个嵌入螺纹池中的类
class Service
{
public:
ThreadPool mThreadPool;
int start();
}
int Service::start()
{
mThreadPoll.Create();
.......
}
上述设计模式的原因我无法模拟我的服务课。
我正在尝试编写一个接口类以进行threadpool并在服务类中使用它:
class InterfaceThreadPool
{
virtual int Create () = 0;
};
class ThreadPool : public InterfaceThreadPool
{
int Create () override;
};
我的想法是创建一个可以在服务类中使用的接口类ThreadPoolimpl:
class Service : public ThreadPoolImpl
{
public:
int start();
}
int Service::start()
{
Create(); // as inherited from ThreadPoolImpl
.......
}
好处是,现在我可以嘲笑我的服务课。但是我无法定义threadpoolimpl类
class ThreadPoolImpl : public InterfaceThreadPool
{
int Create () override;
}
int ThreadPoolImpl::Create()
{
//how can I call ThreadPool Create
}
我实际上不同意 @jarod42注释。如果您想测试和模拟ThreadPool
类和Service
类,那么舒适的方法是这样设计:
class InterfaceThreadPool
{
public:
virtual ~InterfaceThreadPool() = default;
virtual int Create () = 0;
};
class ThreadPool : public InterfaceThreadPool
{
public:
~ThreadPool() override;
int Create () override;
};
class IService
{
public:
virtual ~IService() = default;
virtual int start() = 0;
};
class Service: public IService
{
public:
/*
* InterfaceThreadPool might be passed by raw ptr, reference, smart ptr, whataver you like the most
*/
Service(InterfaceThreadPool* mThreadPool);
~Service() override;
int start() override { return mThreadPool_->Create(); }
private:
InterfaceThreadPool* mThreadPool_;
};
然后,在您的生产代码中,您将使用Service
的适当实现与ThreadPool
一起使用。在您的测试中,您可以使用:
-
MockThreadPool
(从InterfaceThreadPool
派生)到测试Service
-
MockThreadPool
MockService
(从IService
派生)来测试其他需要这两个类的东西 -
MockService
ThreadPool
调用start
函数时调用实现(这不是很常见,但也许您可以发现它有用)
相关文章:
- pybind11 运行测试用例
- GTest,仅参数化测试用例
- 如何使用不同的谷歌模拟运行相同的谷歌测试用例?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 如何使用值模板编写文档测试用例?
- 用于查找最低共同祖先的代码不适用于某些测试用例
- 为什么给定的代码不适用于所有测试用例?为什么当输入为 7786 时它不起作用?
- GTest - 在不同的参数上运行多个测试用例
- 如何创建演示 /EH 成本的最小测试用例?
- 查找在 4 和问题中代码失败的测试用例
- 如何编写在函数执行过程中垃圾回收的测试用例?
- 括号检查器完美地适用于单个测试用例,但对于所有测试用例,它给出了分段错误?
- 我已经通过了该问题的所有测试用例,甚至是Udebugg上的所有测试用例,并且仍然在UVA在线法官上获得了WA裁决
- 如何使用参数化测试用例
- 相同的测试用例,但代码块和Ideone的输出不同
- 在老板层次结构中查找"top"老板仅适用于某些测试用例
- Eclipse 项目中的 OSCPack 外部库测试用例
- 每次使用不同的fixture多次执行一个测试用例
- 在BOOST test中添加测试套件而不是测试用例
- 如何在谷歌代码堵塞中输入c++代码中的测试用例