2010-05-06 13 views
0

Je suis actuellement faire des tests d'intégration sur une base de données et je l'instruction SQL suivante:Test d'une (grande) collection extrait d'une db

var date = DateTime.Parse("01-01-2010 20:30:00"); 
var result = datacontext.Repository<IObject>().Where(r => r.DateTime > date).First(); 
Assert.IsFalse(result.Finished); 

je dois vérifier si les résultats extraits de la déclaration, si la date donnée est inférieure à la date de l'objet, définissez Faux sur Terminé. Je ne sais pas combien de résultats je récupère et actuellement j'obtiens le premier objet de la liste et je vérifie si cet objet a Terminé réglé sur faux. Je sais que tester uniquement le premier élément de la liste n'est pas un test valide, comme une solution pour que je puisse parcourir la liste et cocher tous les éléments sur Terminé, mais mettre la logique dans un test va un peu contre le concept d'écriture tests.

Donc, ma question est:
Quelqu'un at-il une bonne solution pour tester correctement les résultats de cette liste?

Répondre

0

Vous pouvez aller dans l'autre sens, vérifiez si vous avez un résultat dans cette plage de dates que est terminé.

S'il y en a, votre test devrait échouer.

Je ne peux pas tester tout code colombophile, donc je vais vous donner un moyen simple:

int noOfResultsFinished = datacontext.Repository<IObject>() 
     .Where(r => r.DateTime > date && r.Finished).Count(); 

if (noOfResultsFinished > 0) 
{ 
    // fail test 
} 
+0

Merci pour le enlightment! Pourquoi n'y ai-je pas pensé: P – Bas

+0

Parce que personne n'a l'Inspiration de son côté tout le temps :) –