Je suis en train de faire des tests unitaires et je veux savoir s'il y a un moyen de tester si une liste est ordonnée par une propriété des objets qu'elle contient.
Pour l'instant, je le fais de cette façon mais je n'aime pas ça, je veux une meilleure méthode. Quelqu'un peut-il m'aider ?
// (fill the list)
List<StudyFeedItem> studyFeeds =
Feeds.GetStudyFeeds(2120, DateTime.Today.AddDays(-200), 20);
StudyFeedItem previous = studyFeeds.First();
foreach (StudyFeedItem item in studyFeeds)
{
if (item != previous)
{
Assert.IsTrue(previous.Date > item.Date);
}
previous = item;
}
4 votes
Faites attention à ne pas tester des choses qui n'ont pas besoin d'être testées. Vous assurez-vous que la requête contient la clause order by attendue, ou vérifiez-vous simplement que la clause order by fonctionne ? Dans ce dernier cas, c'est du gaspillage.
0 votes
@Chris - c'est un bon point (+1), et je me suis demandé la même chose lorsque j'ai posé la question. Pourquoi dites-vous que tester l'ordre par est une perte de temps ? Devrais-je alors simplement faire confiance au moteur de base de données et au CLR pour que les choses soient claires ?
3 votes
@PITADev : Oui, vous devez absolument faire confiance au moteur de base de données et au CLR pour garder les choses en ordre. Vous ne testez pas que
int x = 2, y = 2, z = x + y
aAssert.IsTrue(z == 4)'
réussir êtes-vous ? Vous devez tester en unité le comportement de vos méthodes publiques et rien de plus. Donc si le comportement attendu derepository.GetItems(true)
retourne une liste ordonnée d'éléments, alors testez-la. Mais ne testez pas queitems.OrderBy(x => x, new YourComparer())
permet en effet de trier la liste. Cependant, faites le test unitaire queYourComparer
se compare en effet correctement.0 votes
Êtes-vous absolument certain qu'il sera toujours ordonné de manière ascendante ou descendante ?
0 votes
Non, c'est quelque chose que je veux tester dans deux scénarios différents.
1 votes
l.OrderBy(e => e).SequenceEqual(l)
le plus simple avec LINQ1 votes
@Dennis Je ne vois pas en quoi cela est important. Il y a des réponses ici et là qui montrent à la fois Linq et une approche for-loop :)
0 votes
@CodeCaster : c'est ma faute :) Je me suis fatigué à faire défiler et j'ai abandonné. Refermez-le, s'il vous plaît.
0 votes
@Dennis Quel est le problème avec les réponses basées sur Linq ? Cela me manque. Quoi qu'il en soit, je vais clore la question.
0 votes
@SriramSakthivel : tout va bien (sauf les performances). Je n'ai simplement pas fait défiler les données non-LINQ.
0 votes
@Martin J'ai émis une demande de fusion en utilisant un drapeau. J'aimerais écrire une nouvelle question wiki communautaire pour fournir une cible de fusion encore meilleure (c'est-à-dire ni "trop localisée" ni "trop large") vers laquelle toutes les réponses peuvent être migrées. Je suis presque sûr qu'il y a environ une centaine de questions de ce type dans le monde. "Comment vérifier si une [liste|collection|tableau] est triée [ascendante|descendante|dans les deux sens]" questions, toutes avec leurs propres réponses répétant l'approche montrée ici. Nous avons besoin de plus de curation de ces canconiques.
0 votes
@PavelZagalsky Pourriez-vous désélectionner ma réponse ? Vous pouvez choisir la réponse de TIm ou celle de Martin. Merci.
0 votes
Bien sûr, j'ai quand même utilisé votre réponse car pour mon usage elle était suffisante. Merci encore