有什么好的方法可以使系统调用代理允许在单元测试中进行模拟?

我试图用虚拟系统调用包装器创建一个代理类,以便在功能代码中可以定义这些包装器以进行系统调用,但是在单元测试中,使它们成为模拟方法。这是我目前的想法,但感觉很笨拙。有没有更好的方法来实现这一目标?

SysCallAgent.hpp

#include <string>
#include <memory>

class SysCallAgent
{
public:
SysCallAgent(){}
virtual ~SysCallAgent(){}

    static SysCallAgent& instance()
    {
        if(!_pInstance)
        {
            _pInstance = std::move(std::make_unique<SysCallAgent>());
        }
        return *_pInstance.get();
    }
    
    //reset is for setting instance as mock object in unit test
    static void reset(std::unique_ptr<SysCallAgent>&& pInstance)
    {
        _pInstance = std::move(pInstance);
    }
    
    
    virtual void system_call1();
    virtual void system_call2();
    ...
    

private:
    static std::unique_ptr<SysCallAgent> _pInstance;
};

=========================功能代码项目====================== ===

SysCallAgent.cpp

void SysCallAgent::system_call1()
{
   /// make the actual system call
}

void SysCallAgent::system_call1()
...

==========================单元测试项目====================== =======

测试文件

class MockSysCallAgent : public SysCallAgent
{
    MOCK_METHOD0(system_call1, void());
    MOCK_METHOD1(system_call2, void());
    ....
}

TEST(test, test)
{
    SysCallAgent::reset(std::move(std::unique_ptr<MockSysCallAgent>()));
}
...
夸拉

想法很好,恕我直言,代码也很好,我想有个警告:您将MockSysCallAgent作为unique_ptr进行注入,因此您将无法再访问该对象。在GoogleMock中,您必须对被测代码中使用的同一对象设置期望值,即,期望调用是模拟对象的内部状态,并且不会被复制等。要像这样注入unique_ptr,您可以使用技巧发表在这个问题上

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有什么好的方法可以对与文件系统的交互进行单元测试?

对调用所有简单函数的主函数进行单元测试的好方法是什么?

模拟远程HTTPS API进行QML应用程序单元测试的好方法是什么?

在 Scala 中进行单元测试的对象方法模拟或监视

有没有一种方法可以使用嘲讽(或类似方法)来模拟我从单元测试中“调用”的脚本的日期和时间?

在D中进行单元测试的公认方法是什么?

模拟单元测试中的行为。为什么验证方法调用有好处?

有什么方法可以模拟结构以在单元测试中获得类?

防止单元测试,但允许在Maven中进行集成测试

对不适合作为新类提取的私有方法进行单元测试的好方法是什么?

模拟外部API以在NodeJ中进行单元测试

在Raku中进行单元测试时如何模拟类方法

对代理进行单元测试

单元测试可以使用被测类的方法进行测试设置吗

在Python中进行单元测试后,基于结果的方法调用

模仿方法在Grails中进行单元测试用例

模拟IMAP或POP服务器进行单元测试的最简单方法是什么?

模拟os.system进行单元测试(PyTest)的最佳方法是什么

使所有 EF Core 模型属性虚拟化,以便在使用 Moq 和 xUnit 的单元测试中进行模拟?

反应单元测试->模拟点击子调用方法

如何使用Mockito模拟静态方法以进行单元测试

模拟 TCP 套接字以进行单元测试的 Python 方法

如何在模拟方法中对函数进行单元测试

将模拟类注入方法以进行单元测试

模拟服务中的方法进行单元测试

有没有一种方法可以正确模拟重新选择选择器以进行单元测试?

单元测试模拟返回的数据有什么意义?

在单元测试中模拟依赖项有什么好处?

如何使用EasyMock对要模拟的类进行多个内部调用来对方法进行单元测试