Étant donné le SUT suivant, considéreriez-vous que ce test d'unité est inutile? ** edit: nous ne pouvons pas supposer que les noms correspondent, donc la réflexion ne fonctionnerait pas.Ce test d'unité est-il excessif?
** edit 2: en réalité, cette classe implémenterait une interface IMapper et il y aurait un test complet de comportement (mock) au niveau de la couche logique métier de l'application. ce test s'avère être le plus bas niveau de test qui doit être basé sur l'état. Je me demande si ce test est vraiment nécessaire parce que le code de test est presque identique au code source lui-même, et basé sur l'expérience réelle, je ne vois pas comment ce test unitaire facilite la maintenance de l'application.
//SUT
public class Mapper
{
public void Map(DataContract from, DataObject to)
{
to.Value1 = from.Value1;
to.Value2 = from.Value2;
....
to.Value100 = from.Value100;
}
}
//Unit Test
public class MapperTest()
{
DataContract contract = new DataContract(){... } ;
DataObject do = new DataObject(){...};
Mapper mapper = new Mapper();
mapper.Map(contract, do);
Assert.AreEqual(do.Value1, contract.Value1);
...
Assert.AreEqual(do.Value100, contract.Value100);
}
Écrire le test que j'ai pu avoir à propos de la septième propriété avant que j'aurais pensé, "ce serait plus facile avec la réflexion." Rédaction du test avec réflexion aurait conduit à la conclusion évidente que l'écriture du code en utilisant la réflexion serait plus facile. – tvanfosson
J'utiliserais l'émission de code plutôt que la réflexion pour faire ceci si tous les noms de propriété correspondaient. Ce serait un peu plus rapide: p –
@ [Otter]: ne laissez pas le commentaire de réflexion détourner l'attention du point principal - cette classe est d'une valeur douteuse, quel que soit le test unitaire. A quoi bon assigner une centaine de champs d'une classe à une autre? pourquoi ne pas les mettre dans un dictionnaire et copier cela? ou juste faire une autre référence –