Comment lancer une SqlException lorsque cela est nécessaire pour des moqueries et des tests unitaires?

Je suis en train de tester quelques exceptions dans mon projet et l'une des Exceptions que je capture est SQlException.

Il semble que vous ne pouvez pas aller new SqlException() donc je ne suis pas sûr de savoir comment je peut lancer une exception surtout sans en quelque sorte l'appel de la base de données (et vu que ce sont des tests unitaires, il est généralement conseillé de ne pas appeler la base de données puisque c'est lent).

Je suis à l'aide de NUnit et Moq, mais je ne suis pas sûr de savoir comment ce faux.

De répondre à certaines des réponses qui semblent tous être fondée sur ADO.NET, sachez que je suis à l'aide de Linq to Sql. Donc, ce genre de choses, c'est comme en coulisses.

Plus d'infos tel que demandé par @MattHamilton:

System.ArgumentException : Type to mock must be an interface or an abstract or non-sealed class.       
  at Moq.Mock`1.CheckParameters()
  at Moq.Mock`1..ctor(MockBehavior behavior, Object[] args)
  at Moq.Mock`1..ctor(MockBehavior behavior)
  at Moq.Mock`1..ctor()

Postes à la première ligne lorsqu'il essaie de maquette

 var ex = new Mock<System.Data.SqlClient.SqlException>();
 ex.SetupGet(e => e.Message).Returns("Exception message");
  • Vous avez raison. J'ai mis à jour ma réponse, mais ce n'est probablement pas très utile maintenant. DbException est probablement la meilleure exception hic cependant, afin de ne prendre en considération.
  • Les réponses qui fonctionnent réellement produire une variété de messages d'exception. Définir précisément le type dont vous avez besoin peut être utile. E. g. "J'ai besoin d'une SqlException qui contient le numéro d'exception 18487, en indiquant le mot de passe spécifié a expiré." Semble d'une telle solution est plus appropriée pour les tests unitaires.
InformationsquelleAutor chobo2 | 2009-09-06