Unit Testing

来自osdev
跳到导航 跳到搜索

单元测试(Unit testing) 意味着,除了实现代码之外,你还要编写一个 “测试驱动程序(test driver)”,该 “测试驱动程序” 将实现代码进行一组试验,检查返回结果的正确性。 请注意,这是在开发/测试期间完成的-“测试驱动程序” 不随发布代码一起提供。

出发点想法是...

  • 如果以后更改实现代码中的内容,则测试驱动程序会告诉你结果是否保持不变 (回归测试 regression test);
  • 如果收到错误报告,则不仅要修复实现代码,还要更新测试驱动程序,以便在不失败单元测试的情况下永远不会再次引入此错误。

单元测试是提高代码可靠性和正确性的好方法。 但是,它要求要测试的代码实际上 “可以” 在测试驱动程序的控制下运行。 你应该很容易看出这在哪里工作变得棘手。 虽然 “应该” 可以在 “测试床 testbed”上测试驱动程序中测试大多数内核功能,但真正 “繁杂” 的东西 (例如中断处理,进程调度或内存管理) 可能无法进行单元测试。

替代/附加选项: 运行时自检

  • 在激活内存提供程序之前,请向它索取内存,记录地址,释放内存并再次索取内存。 在这种情况下,大多数分配器都将返回相同的地址。
  • 如果你的内存管理器具有一些 “空闲区域合并” 功能,请分配尽可能多的 “小” 区域,然后释放所有 “奇数” 区域,然后释放所有 “均匀” 区域 (强调考察合并功能)。 完成后,请尝试分配一个与最初获得的所有小区域的集合一样大的区域。
  • 在启动许多线程之前,请启动一个线程,该线程将发出 信号量 的信号,然后等待该信号量。 如果你的调度程序 (和信号量) 工作正常,则只能在其他线程已执行的情况下继续运行。
  • 启用中断 (尤其是计时器) 后,轮询 “tick计数器”,直到它计数完成 (确认计时器中断工作正常)

由于许多测试可能会挂起,因此建议你在知道测试是否成功之前,先打印正在运行的测试状况。