【发布时间】:2011-04-03 05:28:26
【问题描述】:
假设我决定用 C 或任何其他过程编程语言编写一个大型应用程序。它具有如下所示的调用依赖函数:
A
|
+-------------+
| |
B1 B2
| |
+------+ +------+
| | | |
C11 C12 C21 C22
显然,对叶子函数、C11、C12、C21 和 C22 进行单元测试非常容易:设置输入、调用函数、断言输出。
但是,为 B1、B2 和 A 启用良好的单元测试的正确策略是什么?
Dependency Injection 是否会建议将B1(以及B2)声明为如下?
// Declare B1 with dependency injection for invoking C11 and C12.
int B1(int input, int (*c11)(int), int(*c12)(int));
但是,如果我有多层调用,该策略似乎无法扩展。想象一下A 的声明会是什么样子:
int A(int input, int (*b1)(int, int (*)(int), int(*)(int)),
int(*b2)(int, int (*)(int), int(*)(int)),
int (*c11)(int),
int (*c12)(int),
int (*c21)(int),
int (*c22)(int));
呸!必须有更好的方法。
有时,我觉得 DI 和其他旨在促进模块化和易于维护的类似模式实际上会妨碍代码的清晰性,并使应该直接编码为无意义的抽象和复杂的间接的复杂化。
大型软件项目(如 Perl 和 Ruby)如何处理单元测试?
【问题讨论】:
标签: dependency-injection procedural-programming