Scrivo codice in C. Ho cercato di scrivere un codice più testabile, ma sono un po ' confuso nel decidere tra la scrittura di funzioni pure che sono veramente buone per i test ma richiedono funzioni più piccole e pregiudicano la leggibilità secondo me e le funzioni di scrittura che modifica alcuni stati interni.
Ad esempio (tutte le variabili di stato sono dichiarate statiche e quindi sono "private" al mio modulo):
Quale di questi è più testabile secondo la tua opinione:
int outer_API_bar()
{
// Modify internal state
internal_foo()
}
int internal_foo()
{
// Do stuff
if (internal_state_variable)
{
// Do some more stuff
internal_state_variable = false;
}
}
o
int outer_API_bar()
{
// Modify internal state
internal_foo(internal_state_variable)
// This could be another function if repeated many
// times in the module
if (internal_state_variable)
{
internal_state_variable = false;
}
}
int internal_foo(bool arg)
{
// Do stuff
if (arg)
{
// Do some more stuff
}
}
Anche se la seconda implementazione è più testabile a internal_foo in quanto non ha effetti collaterali ma rende la barra più brutta e richiede funzioni più piccole che rendono difficile per il lettore persino seguire piccoli frammenti poiché deve spostare costantemente l'attenzione su diverse funzioni.
Quale pensi sia meglio? Confronta questo con la scrittura del codice OOPS, le funzioni private per la maggior parte del tempo usano lo stato interno e non sono pure. Il test viene eseguito impostando lo stato interno su un'istanza dell'oggetto fittizio e testando la funzione privata. Mi viene un po 'confuso se utilizzare o se passare in stato interno a funzioni private per motivi di "testabilità"