Estoy tratando de comenzar a utilizar Pruebas unitarias en mi proyecto actual en Visual Studio 2010. Mi estructura de clase, sin embargo, contiene una serie de relaciones de herencia de clase abstracta e interfaz.Pruebas unitarias clases abstractas y/o interfaces
Si dos clases se derivan de la misma clase abstracta, o interfaz, me gustaría poder compartir el código de prueba entre ellas. No estoy seguro de cómo hacer esto exactamente. Creo que creo una clase de prueba para cada interfaz que quiero probar, pero no estoy seguro de la forma correcta de alimentar mis clases concretas en las pruebas unitarias aplicables.
actualización
bien aquí es un ejemplo. Digamos que tengo una interfaz IEmployee, que es implementada por una clase abstracta Employee, que luego es heredada por las dos clases concretas Worker y Employee. (El código se muestra a continuación)
Ahora digo que quiero crear pruebas que se apliquen a todos los empleados de IE o empleados. O, como alternativa, cree pruebas específicas para tipos específicos de empleados. Por ejemplo, puede querer afirmar que establecer IEmployer.Number en un número menor que cero para cualquier implementación de IEmployee arroja una excepción. Preferiría escribir las pruebas desde la perspectiva de cualquier empleado de IE y luego poder usar las pruebas en cualquier implementación de IEmployee.
Aquí hay otro ejemplo. También es posible que desee afirmar que establecer el tiempo de vacaciones para cualquier empleado a un valor inferior a cero tiradas y error. Sin embargo, es posible que también desee tener diferentes pruebas que se apliquen a una versión concreta específica de Employee. Digamos que quiero probar ese trabajador se produce una excepción si se proporcionan más de 14 días de vacaciones, pero un administrador puede proporcionar hasta 36.
public interface IEmployee
{
string Name {get; set;}
int Number {get; set;}
}
public abstract class Employee:IEmploee
{
string Name {get; set;}
int Number {get;set;}
public abstract int VacationTime(get; set;)
}
public abstract class Worker:IEmployee
{
private int v;
private int vTime;
public abstract int VacationTime
{
get
{
return VTime;
}
set
{
if(value>36) throw new ArgumentException("Exceeded allowed vaction");
if(value<0)throw new ArgumentException("Vacation time must be >0");
vTime= value;
}
}
public void DoSomWork()
{
//Work
}
}
public abstract class Manager:IEmployee
{
public abstract int VacationTime
{
get
{
return VTime;
}
set
{
if(value>14) throw new ArgumentException("Exceeded allowed vaction");
if(value<0)throw new ArgumentException("Vacation time must be >0");
vTime= value;
}
}
public void DoSomeManaging()
{
//manage
}
}
así que supongo que lo que estoy buscando es un flujo de trabajo eso me permitirá anidar pruebas unitarias. Entonces, por ejemplo, cuando pruebo la clase Manager, primero quiero probar que pasa las pruebas Employee e IEmployee, y luego probar miembros específicos como DoSomeManaging()
.
No está claro qué estás tratando de hacer. Usted habla sobre interfaces de pruebas unitarias, pero esto no tiene sentido. ¿Qué estás tratando de probar exactamente?¿Podría proporcionar un ejemplo breve y conciso de su jerarquía de objetos y señalar qué es lo que quiere probar en esta jerarquía? –
No quiero probar la interfaz por separado, pero quiero poder agrupar todas las pruebas que se aplican a una interfaz para poder aplicar fácilmente todas esas pruebas a cualquier clase que implemente la interfaz. Vea el ejemplo que agregué a mi pregunta. –