mi actual forma de organización de las pruebas unitarias se reduce a lo siguiente:¿Cómo organizar pruebas unitarias y no hacer que la refactorización sea una pesadilla?
- Cada proyecto tiene su propio proyecto dedicado con pruebas unitarias. Para un proyecto
BusinessLayer
, existe un proyecto de pruebaBusinessLayer.UnitTests
. - Para cada clase que quiero probar, hay una clase de prueba separada en el proyecto de prueba dentro de la misma estructura de carpetas exactamente en el mismo espacio de nombres que la clase bajo prueba. Para una clase
CustomerRepository
desde un espacio de nombresBusinessLayer.Repositories
, hay una clase de pruebaCustomerRepositoryTests
en un espacio de nombresBusinessLayerUnitTests.Repositories
.
Los métodos de cada clase de prueba siguen la convención de nomenclatura simple MethodName_Condition_ExpectedOutcome
. Así la clase CustomerRepositoryTests
que contiene las pruebas para una clase CustomerRepository
con un método definido Get
tiene el siguiente aspecto:
[TestFixture]
public class CustomerRepositoryTests
{
[Test]
public void Get_WhenX_ThenRecordIsReturned()
{
// ...
}
[Test]
public void Get_WhenY_ThenExceptionIsThrown()
{
// ...
}
}
Este enfoque me ha servido bastante bien, porque hace que la localización de las pruebas por alguna pieza de código muy simple. En el sitio opuesto, hace la refactorización de código realmente más difícil de lo que debería ser:
- Cuando decido dividir un proyecto en varios más pequeños, también necesito dividir mi proyecto de prueba.
- Cuando quiero cambiar el espacio de nombres de una clase, debo recordar cambiar también un espacio de nombres (y una estructura de carpetas) de una clase de prueba.
- Cuando cambio el nombre de un método, tengo que pasar por todas las pruebas y cambiar el nombre allí, también. Claro, puedo usar Search & Reemplazar, pero eso no es muy confiable. Al final, aún necesito verificar los cambios de forma manual.
¿Hay alguna forma inteligente de la organización de pruebas de unidad que todavía me permite localizar pruebas para un código específico de forma rápida y al mismo tiempo, se presta más a la refactorización?
Alternativamente, ¿hay alguna, uh, tal vez la extensión de Visual Studio, que permitiría a mí decir de alguna manera que "oye, estos pruebas son para que método, por lo que cuando el nombre de los cambios de método, por favor sea tan amable y cambiar las pruebas también "? Para ser sincero, estoy considerando seriamente escribir algo como eso :)
¿Cómo nombras tus métodos de prueba? ¿Contienen el nombre del método que está probando? –
@ UfukHacıoğulları Sí, lo hacen. En la pregunta menciono la convención exacta que siguen estos nombres. –