Sto appena entrando nei test unitari utilizzando Visual Studio 2010. Mi chiedo se esiste un flusso di lavoro che mi consenta di creare una serie di test applicabili a un'interfaccia e quindi applicare tali test di interfaccia a qualsiasi classe che implementano l'interfaccia.Come evitare di scrivere test di unità duplicati per classi che implementano la stessa interfaccia?
Ad esempio, ho la seguente interfaccia.
public interface IAnimal
{
public string Name {get;}
public string Speak();
}
Potrei ovviamente avere un numero di classi che implementano questa interfaccia.
public class Dog:IAnimal
{
public string Name {get{return "Dog";}}
public string Speak{return "BARK BARK";}
public bool LickBalls();
}
public class Cat:IAnimal
{
public string Name {get{return "Cat";}}
public string Speak{return "MEOW MEOW";}
public bool Scratch();
}
Così mi piacerebbe definire una serie di test che si applicano a tutti IAnimals
public TestAnimalName(IAnimal animal)
{
Assert.IsFalse(string.IsNullorEmpty(animal.Name));
}
public TestAnimalSpeak(IAnimal animal)
{
string sound = animal.Speak();
Assert.IsFalse(string.IsNullOrEmpty(sound));
}
Poi mi piacerebbe definire un metodo di TestAnimal()
maestro che potrebbe essere utilizzato per testare qualsiasi IAnimal
.
TestAnimal(IAnimal animal)
{
TestAnimalName(animal);
TestAnimalSpeak(animal);
}
ho potuto quindi chiamare questo metodo TestAnimal()
quando si verifica un tipo concreto di IAnimal
.
[TestMethod]
TestCat()
{
Cat c = new Cat();
TestAnimal(c);
}
[TestMethod]
TestDog()
{
Dog c = new Dog();
TestAnimal(c);
}
Eppure, quando provo a fare questa operazione in Visual Studio il Asserts
nei cosiddetti metodi vengono ignorati. Ho provato a semplificare il problema con il metodo seguente e ho scoperto che è passato anche se chiama un metodo che dovrebbe causare un errore.
Quindi, come posso evitare di scrivere molti test duplicati per le classi che implementano tutti la stessa interfaccia?
wow che è il comportamento interrotto dal test dell'unità VS. se usi NUnit, funzionerebbe come ti aspetti. –
direi che il tuo problema non è scrivere i test, quelli sembrano approcci ragionevoli per me. il problema è il comportamento interrotto nel test dell'unità VS. –
Mentre non conosco la risposta, il metodo "LickBalls" mi ha fatto LOL. – Scottie