2010-06-06 5 views
1

Je veux tester par exempleEst-ce que MS Test fournit une valeur par défaut égale à la comparaison?

int orderId = myRepository.SubmitOrder(orderA); 

orderB = myRepository.GetOrder(orderId); 

Assert.AreEqual(orderA, orderB); // fail 

Il est évident que je besoin d'une comparaison de la valeur, mais je ne veux pas avoir à fournir une redéfinie Equals mise en œuvre pour toutes mes classes uniquement pour des raisons de test (il ne serait d'aucune utilité dans le reste de l'application).

Existe-t-il une méthode générique fournie qui vérifie simplement chaque champ en utilisant la réflexion? Ou sinon, il est possible d'écrire le mien?

EDIT: Comme il semble que les gens manquent un peu le point. Je ne veux pas avoir à écrire ma propre logique de comparaison. Cela nécessiterait des centaines de lignes de code supplémentaire. Je cherche quelque chose comme une méthode générique

bool ContainSameValues<T>(T t1, T t2)

qui utilise récursive réflexion pour tirer toutes les valeurs de T.

EDIT DE PLUS: Comme il ne semble pas qu'il y ait construit dans le soutien de faire quelque chose comme ça, vous pouvez voir ma tentative (échouée) d'écrire le mien here

Répondre

1

meilleure chose à faire est de comparer les champs « primitifs » vous:

Assert.AreEqual(orderA.ID, orderB.ID);  
Assert.AreEqual(orderA.CustomerID, orderB.CustomerID); 
Assert.AreEqual(orderA.OrderDate, orderB.OrderDate); 
+0

j'ai trop de classes avec trop de champs pour que, pour être pratique. – fearofawhackplanet

-2

Vous devrez implémenter IComparable (ou ICompare?) dans la classe order.method.

0

Comme la classe Assert est statique, il est impossible de créer des méthodes d'extension sur (comme une instance est nécessaire). Cependant, pourquoi ne pas créer un wrapper pour la classe Assert, où vous pouvez effectuer des assertions personnalisées?

par exemple:

public static class MyAssertions 
{ 
    public static void AreOrdersEqual(Order a, Order b) 
    { 
     if (!OrdersAreEqual) // your comparison logic here 
      Assert.Fail("Orders arent equal");   
    } 
} 

Puis dans votre test:

MyAssertions.AreOrdersEqual(orderA, orderB)