D语言测试驱动开发(TDD)的函数脚手架标准实现方式咨询
在D语言中进行TDD的空函数脚手架方案
作为D语言开发者,我完全理解你在TDD流程里需要先搭建能让测试失败的函数脚手架的需求!在D里,有几种和C#的NotImplementedException异曲同工的实现方式,下面给你详细介绍:
1. 抛出NotImplementedError异常
D标准库提供了core.exception.NotImplementedError,这就是专门用来标记未实现代码的异常,用法和C#的方式几乎一致:
import core.exception; int Foo(int x, int y) { throw new NotImplementedError("Foo 函数尚未实现"); }
当测试调用这个函数时,会直接抛出异常,让测试明确失败,完美契合TDD「先红后绿」的核心流程。
2. 返回类型的默认值(适合非void返回类型)
如果你的函数需要返回值,但暂时不想抛出异常,可以返回对应类型的默认值。D里可以用T.init来获取任意类型的默认值:
int Foo(int x, int y) { return int.init; // 对于int来说默认值是0 } string Bar() { return string.init; // 字符串的默认值是空字符串 }
这种方式适合那些需要先让代码编译通过,但暂时不关注具体实现的场景,不过要注意测试需要针对性检测返回值是否符合预期,避免误判测试通过。
3. 使用static assert强制编译失败
如果你想在编译阶段就提醒自己这个函数还没实现,而不是等到运行时才发现,可以用static assert:
int Foo(int x, int y) { static assert(false, "Foo 函数尚未实现,请填充业务逻辑"); }
这种方式会在编译时直接报错,完全阻止代码运行,适合那些必须实现后才能继续开发的关键函数,确保你不会遗漏核心逻辑的编写。
总结
- 优先推荐
NotImplementedError,它语义明确,能让测试清晰失败,完美匹配TDD的流程; - 默认值返回适合需要编译通过但暂时不关注实现细节的场景;
static assert适合强制自己必须完成实现才能推进开发的情况。
内容的提问来源于stack exchange,提问作者Aaron Thomas
相关产品推荐
相关产品推荐

