En utilisant NUnit et NMock2 je n'étais pas en mesure de comparer ce que je pensais étaient les mêmes SqlParameters:Comment SqlParameter test pour l'égalité
SqlParameter param1 = new SqlParameter("@Id", 1);
SqlParameter param2 = new SqlParameter("@Id", 1);
Assert.IsTrue(param1.Equals(param2)); // This failed
je suis tombé sur ce problème, en essayant de tester l'exécution d'une méthode utilisant NMock2
[Test]
public void UpdateComments()
{
const int arbitraryId = 1;
Comment comment = new Comment();
SqlParameter idParam = new SqlParameter("@ChangeId", arbitraryId);
Expect.Once.On(mockSqlDao).Method("ExecuteNonQuery")
.With("usp_Update_Comment", idParam);
changeDao.UpdateComment(arbitraryId, comment);
mocks.VerifyAllExpectationsHaveBeenMet();
}
J'ai reçu cette erreur:
NMock2.Internal.ExpectationException: unexpected invocation of sqlDao.ExecuteNonQuery("usp_Update_Comment",) Expected: 1 time: sqlDao.ExecuteNonQuery(equal to "usp_Update_Comment", equal to <@ChangeId>) [called 0 times]
questions:
- Comment testez-vous avec NMock2 lorsque le paramètre attendu est SqlParameter?
- Comment comparez-vous l'égalité de deux SqlParameters?
Je suppose que SqlParameter.Equals est un test d'égalité objet, afin de ne pas vous définir ce que cela signifierait pour deux paramètres soient « égaux » dans un autre sens. Il y a beaucoup de champs dans le SqlParameter; S'il suffit que le nom de la colonne et la valeur correspondent, vous pouvez les tester directement. Je ne peux pas commenter sur NMock cependant. – Mikeb
Je suspecte le NMock2 échoue parce qu'il voit le paramètre appelant comme différent du paramètre attendu. Je m'attendrais à ce que les autres propriétés de SqlParameter soient initialisées avec la même valeur par défaut. Cela peut ou peut ne pas être vrai. Également une note de côté ici plus d'informations sur l'appel de méthode; changeDao.Updatecomment (string proc, paramètres SqlParameter [] paramètres) ... – sgmeyer