How to throw a SqlException when needed for mocking and unit testing?

前端 未结 14 1708
孤街浪徒
孤街浪徒 2020-12-05 01:28

I am trying to test some exceptions in my project and one of the Exceptions I catch is SQlException.

It seems that you can\'t go new SqlException(

14条回答
  •  一个人的身影
    2020-12-05 02:29

    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()))
        .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.

提交回复
热议问题