kre*_*tar 1 c++ windows oop testing
我目前正在尝试使用某个SDK,它让我从供应商提供的DLL中加载函数.我必须将参数传递给这些函数,DLL完成所有工作.
现在,DLL应该与另一个设备通信,而我只是等待结果.但是,我没有这个设备,那么如何设置模拟界面来模拟设备呢?
要清楚,这是一个例子:
myfuncpointer.Open(someparam,anotherparam,...);
Run Code Online (Sandbox Code Playgroud)
现在,因为我没有设备,DLL实际上无法执行上述功能; 它失败.如何设置测试以便DLL与我设计的类而不是设备进行对话?有没有办法重定向DLL的调用?
如何使DummyDevice类执行此操作?
谢谢..
PS如果有什么不清楚,请不要太快速downvote ..评论我需要解释,我会尝试清理它..谢谢.
编辑:然而,我所拥有的是一张规格表,其中包含所有使用的数据结构以及它必须包含的预期/合法值.例如,如果我调用一个函数:
myfuncpointer.getinfo(param,otherparam);
Run Code Online (Sandbox Code Playgroud)
其中一个参数是一个数据结构,DLL在查询设备后填充了信息(比如,如果启用了选项)..我可以这样做
param.option = true;
Run Code Online (Sandbox Code Playgroud)
完成getinfo调用之后.
这是测试代码的好方法吗?欺骗这个DLL来思考所有错误的东西似乎非常非常危险,而且似乎真的很难扩展甚至只是一点点..
仿真设备是否可以获得权宜之计解决方案,直到您获得硬件?如果是这样,我建议找一些其他方法来提高效率:处理其他事情,编写单元测试等.
模拟设备访问是永久性要求吗?如果是这样,您可以采取以下几种方法:
如果其他供应商的SDK具有"模拟"或"仿真"模式,请使用它.你可能会感到惊讶.如果没有安装其他供应商的硬件,您可能不是唯一需要能够测试/运行其应用程序的客户端.
从图片中取出其他供应商的代码.仅模拟应用程序所需的功能,并根据程序的要求进行模拟.一切都在你的掌控之中.
一个.添加间接层.使用多态在两个实现之间切换:一个调用另一个供应商的DLL,另一个模拟其行为.将代码调用到抽象基类而不是直接调用其他供应商的DLL也可以更容易地为代码编写单元测试.
湾 编写一个模拟DLL(如Adam Rosenfield建议的那样).您需要完全匹配函数名称和调用约定.当您升级到其他供应商的DLL的新版本时,您将需要扩展模拟DLL以支持您的应用程序使用的任何新入口点.
如果你需要选择在运行时使用哪个DLL,这可能需要转换你的代码来动态加载DLL(但听起来你可能已经这样做了,假设你说了一些关于函数指针的东西).您可以在安装时决定是安装其他供应商的DLL还是模拟DLL.如果这纯粹是出于测试目的,您可以选择在编译时使用哪个DLL,并且只构建应用程序的两个版本.
写一个模拟设备驱动程序(正如其他人建议的那样).
如果您有其他供应商的用户模式DLL与其设备驱动程序之间的接口规范,这可能是可行的.即使您是经验丰富的设备驱动程序开发人员,也可能需要比其他任何方法更长的时间,特别是如果您没有其他供应商的DLL的源代码.UMDF(用户模式驱动程序框架)可能会使这更容易或更省时.
如果您提到的规范没有描述用户/内核接口,则需要对该接口进行反向工程.与其他选项相比,这可能不会有效地利用您的时间,特别是如果驱动程序接口很复杂(例如,它传递了大量复杂的数据结构DeviceIoControl()).
在这两种情况下,每次升级到其他供应商的SDK的新版本时,您都需要重新访问它.相同的导出DLL函数可能需要使用新DeviceIoControl()代码和结构.