Estou tentando adquirir o hábito de escrever testes de unidade regularmente com meu código, mas li que primeiro é importante escrever código testável . Esta pergunta aborda os princípios do SOLID de escrever código testável, mas quero saber se esses princípios de design são benéficos (ou pelo menos não prejudiciais) sem o planejamento de escrever testes. Para esclarecer - eu entendo a importância de escrever testes; Esta não é uma pergunta sobre a sua utilidade.
Para ilustrar minha confusão, na peça que inspirou essa pergunta, o escritor dá um exemplo de uma função que verifica a hora atual e retorna algum valor, dependendo da hora. O autor aponta para isso como código incorreto, porque produz os dados (o tempo) que usa internamente, dificultando o teste. Para mim, no entanto, parece um exagero passar no tempo como argumento. Em algum momento, o valor precisa ser inicializado e por que não estar mais próximo do consumo? Além disso, o objetivo do método em minha mente é retornar algum valor com base no tempo atual , tornando-o um parâmetro que você implica que esse objetivo pode / deve ser alterado. Isso e outras perguntas me levaram a pensar se código testável era sinônimo de código "melhor".
Escrever código testável ainda é uma boa prática, mesmo na ausência de testes?
O código testável é realmente mais estável? foi sugerido como duplicado. No entanto, essa pergunta é sobre a "estabilidade" do código, mas estou perguntando de maneira mais ampla se o código também é superior por outros motivos, como legibilidade, desempenho, acoplamento etc.
func(X)
retornar "Morning"
, substituir todas as ocorrências de func(X)
com "Morning"
não mudará o programa (ou seja, chamar func
não faz outra coisa senão retornar o valor). Idempotency implica quer que func(func(X)) == X
(que não é do tipo correcto-), ou que func(X); func(X);
executa os mesmos efeitos secundários como func(X)
(mas não existem efeitos colaterais aqui)