njeção de dependência para programação processu

Suponha que eu decidi escrever um aplicativo grande em C ou qualquer outra linguagem de programação processual. Possui funções com dependências de chamada que se parecem com isso:

A
|
+-------------+
|             |
B1            B2
|             |
+------+      +------+
|      |      |      |
C11    C12    C21    C22

Obviamente, o teste unitário das funções de folhas C11, C12, C21 e C22 é muito fácil: configure as entradas, chame as funções, afirme as saída

Mas qual é a estratégia adequada para permitir um bom teste de unidade para B1, B2 e A?

SeriaInjeção de dependênci sugere queB1 (eB2 também) ser declarado como segue?

// Declare B1 with dependency injection for invoking C11 and C12.
int B1(int input, int (*c11)(int), int(*c12)(int));

Mas essa estratégia não parece escalável se eu tiver muitas camadas de chamadas. Imagine o que a declaração paraA pareceria

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));

Que nojo! Tem que haver uma maneira melhor.

s vezes, sinto que o DI e outros padrões semelhantes que pretendem promover a modularidade e a facilidade de manutenção realmente dificultam a clareza do código e complicam o que deveria ser uma codificação direta em abstrações sem sentido e indiretas complicada

Como os grandes projetos de software em C, como Perl e Ruby, lidam com testes de unidad

questionAnswers(5)

yourAnswerToTheQuestion