Estoy refactorizando una clase para que el código sea comprobable (usando NUnit y RhinoMocks como framework de pruebas y aislamientos) y encontré que he encontrado que un método depende de otro (es decir, depende de algo creado por ese otro método). Algo así como lo siguiente:¿Es un código malicioso que un método dependa de otro?
public class Impersonator
{
private ImpersonationContext _context;
public void Impersonate()
{
...
_context = GetContext();
...
}
public void UndoImpersonation()
{
if (_context != null)
_someDepend.Undo();
}
}
lo que significa que a prueba de UndoImpersonation
, necesito configurarlo llamando Impersonate
(Impersonate ya cuenta con varias pruebas de unidad para verificar su comportamiento). Esto huele mal en mí, sino en cierto sentido, tiene sentido desde el punto de vista del código que llama a esta clase:
public void ExerciseClassToTest(Impersonator c)
{
try
{
if (NeedImpersonation())
{
c.Impersonate();
}
...
}
finally
{
c.UndoImpersonation();
}
}
no habría trabajado esto si yo no trato de escribir una prueba de unidad para UndoImpersonation
y me encontré teniendo que configurar la prueba llamando al otro método público. Entonces, ¿esto es un mal olor y si es así cómo puedo evitarlo?
Por cierto, esta muestra un aspecto importante - en beneficio de la unidad de pruebas (?): Te hace pensar acerca de su diseño ... :-) – sleske
Sí, acordó:) – jpoh