I have a solution to this. I’m not sure whether it’s genius or madness.
The following code will create a new SqlException:
public SqlException MakeSqlException() {
SqlException exception = null;
try {
SqlConnection conn = new SqlConnection(@"Data Source=.;Database=GUARANTEED_TO_FAIL;Connection Timeout=1");
conn.Open();
} catch(SqlException ex) {
exception = ex;
}
return(exception);
}
which you can then use like so (this example is using Moq)
mockSqlDataStore
.Setup(x => x.ChangePassword(userId, It.IsAny<string>()))
.Throws(MakeSqlException());
so that you can test your SqlException error handling in your repositories, handlers and controllers.
Now I need to go and lie down.