【问题标题】:Unit testing a communications protocol单元测试通信协议
【发布时间】:2009-08-11 14:11:10
【问题描述】:

我正在开发一个库,用于通过 RS-422 端口与 FPGA 进行串行通信。这个库是一个更大项目的一部分。

我知道我可以测试它的某些部分,例如消息生成。您设置输入,您可以测试字节数组是否与预期匹配。但是,如果我想做一个更通用的测试,我该如何为它生成单元测试呢?我必须编写 FPGA 行为的模拟器吗?是否可以单独测试该库?

【问题讨论】:

    标签: c# unit-testing testing communication


    【解决方案1】:

    我想说,使用模拟器或模拟进行测试会让您更轻松地练习代码路径,而不是使用真实的东西。

    理想情况下,使用预先存在的东西。否则,构建仿真可能不是一件小事。但是,如果您对协议的理解不够好,无法模拟它,那么您肯定无法与之通信:-)

    【讨论】:

    • 正如您所指出的,在这种情况下,问题在于单元测试可能需要付出很大的努力......
    • 不确定这是否是伟大的努力,从某种模拟库开始。如果替代方案是 no 测试,那么我们需要做这项工作。可能你可以针对真正的协议做一些简单的事情,但边缘情况可能需要某种模拟器。
    • 是的,我同意你的观点,因为我看到的是模拟或不是单元测试。作为一个复杂系统的一部分,我更喜欢尽可能地隔离可能的错误。
    【解决方案2】:

    您可以制作一个模拟类,用作模拟器。只需让它让您的写入函数处理您发送的信息并将结果保存在某种缓冲区中,这可能只是一个普通的字符串。然后创建一个读取字符串的读取函数,将其擦除,然后将其返回给您。

    【讨论】:

    • 这不再是单元测试,而是集成测试——因此是正确的方法。单元测试只是对它们自己进行测试的类。
    • @BeowulfOF 这就是我的想法......我不想最终对我的单元测试进行单元测试:-)
    • 使用模拟不是集成测试,一般来说,对于严肃的单元测试来说,通常很难以某种形式避免模拟。
    【解决方案3】:

    您要对 FPGA 的驱动程序进行单元测试,还是要对协议进行单元测试? 因为如果你想同时测试两者,它在我看来已经像是一个(系统)集成测试。

    是的,可以单独测试通信库。确保您的通信协议不会与设备驱动程序过于交织;这样你就可以单独测试它。

    我的建议:

    • 单元测试小部件;彻底测试它们
    • 检查你想要的集成测试;大量数据或压力测试?使其与单元测试正交
    • 如果你模拟硬件,让它变得非常简单

    在测试 FPGA+通信库时我会感兴趣的错误类型:

    • 是否按照规范处理协议?
    • 它在缓冲区溢出/下溢时表现如何?
    • 中断处理是否按预期工作?
    • 它是否正确处理所有 rsx22 信号(中断、奇偶校验、停止位)?

    至于模拟:我在 Matlab/Simulink 中运行代码(即使用免费插件 TrueTime)获得了非常好的结果。然后可以使用 Simulink 连接到回路中的硬件 (HIL) 或回路中的模型。或者,可以使用软件模型(但通常很难模拟异步事件,如果您靠近硬件;即中断处理程序,这将非常有趣)

    【讨论】:

    • 我只是想在电脑端测试一下协议。 FPGA 是由其他人开发的,我们都有规格。
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2017-05-16
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2012-10-24
    相关资源
    最近更新 更多