0

我是 TDD 和单元测试的新手,目前正在阅读 James Greenings 的《嵌入式 C 的 TDD》一书。

我真的采用双重目标,因为它可以在主机和目标设备上测试我的情况。

我正在对我的放大器驱动程序进行单元测试,并且有两个要求被声明为

每当需要时,驱动程序应手动读取放大器 IC 上的故障通知引脚。

故障通知引脚应在发生任何故障时触发系统。

如您所见,应该有一个 read_fault_notification 函数,它传递地址并访问硬件。到这里为止一切都很好。

这是我在amp.c中的ampamp_get_fault_notification 函数

放大器.c

fault_state_t amplifier_get_fault_notification(amplifier_t device)
{   
    return device->fault.fault_state= amplifier_gpio_read(device->fault.fault_address);
}

现在,ampl_gpio_read 链接到 hardware.c 中的特定于目标的函数,因此,硬件抽象提供了。

static state_t target_device_gpio_read(uint8_t pin_name)
{
    switch(pin_name)
    {
    case FAULT1:/*Fault pin @ Loudspeaker1*/
            /*
                 * TO DO: Read IO for fault pin of Loudspeaker Amplifier1, if required.
                 */
        break;
    case FAULT2:/*Fault pin @ Loudspeaker2*/
            /*
                * TO DO: Read IO for fault pin of Loudspeaker Amplifier2, if required.
                */
        break;
    case FAULT3:/*Fault pin @ Loudspeaker3*/
            /*
                * TO DO: Read IO for fault pin of Loudspeaker Amplifier3, if required.
                */
        break;
    case FAULT4:/*Fault pin @ Loudspeaker4*/
            /*
                * TO DO: Read IO for fault pin of Loudspeaker Amplifier4, if required.
                */
        break;
    default:
        
        break;
    }
    return 1;/*hard coded*/
}

问题是我应该如何测试这个要求“驱动程序应在需要时手动读取放大器 IC 上的故障通知引脚”。@kamilcuk 告诉我,如果您想参加此活动,请进行整合。如果您想测试您的函数,请模拟它但没有告诉我如何设置该测试用例。

另一个似乎更困难的问题是我应该如何以及在哪里(在这个驱动程序层或应用程序层?)测试这个要求“故障通知引脚应在发生任何故障时触发系统”。

每个人都告诉我使用模拟。问题是没有使用mock框架,这个很简单,问题是虽然我看了很多资料,还是不明白Mocking的概念。因为,在詹姆斯的书中,他是在填充硬件相关代码的函数体来表现得像真的一样,这让我很困惑。一旦虚拟地编写依赖于硬件的代码,根据这个虚拟函数测试嵌套的指令函数对我来说没有意义。目的是什么。双目标方法很好。我觉得自己有点白痴。

4

0 回答 0