J'ai une interface avec une méthode CopyFrom() qui copie toutes les propriétés d'un autre objet. J'ai un test qui exécute plusieurs VerifyGet() appelle à faire en sorte que chaque propriété a été extraite de l'objet passé, par exemple:En utilisant Moq, comment vérifier toutes les propriétés d'un objet ont été copiées?
Thing target = new Thing();
IThing source = new Mock<IThing>();
target.CopyFrom(source.Object);
source.VerifyGet(t => t.Foo);
source.VerifyGet(t => t.Bar);
Je voudrais un moyen d'itérer sur les propriétés de IThing
bien et vérifier que chaque a été copié automatiquement afin que le test échoue si quelqu'un ajoute une propriété mais oublie de le copier. Y a-t-il un moyen de le faire via Moq? J'ai essayé;
foreach (var prop in typeof(IThing).GetProperties())
{
source.VerifyGet(t => prop.Invoke(t, null));
}
mais cela n'a pas fonctionné puisque le lambda ne représentait pas un accesseur de propriété. Je pense qu'il devrait y avoir un moyen de créer quelque chose via la classe Expression
, mais je ne suis pas assez familier avec LINQ pour comprendre ce qui devrait être là.
Cela ne répond pas à votre question, mais vous devriez vraiment envisager d'utiliser AutoMapper pour ce genre de choses. Cela évitera les mappages de propriétés oubliés, surtout si leurs noms sont identiques. –