Tengo el siguiente código para probar que cuando se pasa un cierto nombre a mi método, arroja una excepción SQL (hay una razón para eso, aunque suena un poco extraño).Moq y lanzando una SqlException
mockAccountDAL.Setup(m => m.CreateAccount(It.IsAny<string>(),
"Display Name 2", It.IsAny<string>())).Throws<SqlException>();
Sin embargo, esto no va a compilar porque el constructor de SqlException es interno:
'System.Data.SqlClient.SqlException' debe ser un tipo no abstracto con un constructor sin parámetros pública con el fin para utilizarlo como parámetro 'TException' en el tipo genérico o método 'Moq.Language.IThrows.Throws()'
Ahora, podría cambiar esta afirmar que debería lanzar Exception
, pero eso no funcionaría para mí, porque mi método debería devolver un código de estado si es un SqlException
y otro si es cualquier otra excepción. Eso es lo que prueba mi unidad.
¿Hay alguna manera de lograr esto sin cambiar la lógica del método que estoy probando o sin probar este escenario?
posible duplicado de [Cómo lanzar una SqlException (necesidad de burlarse)] (http://stackoverflow.com/questions/1386962/how-to-throw-a-sqlexceptionneed-for-mocking) –
Puede usar Reflection para acceda al método interno CreateException que le permite crear una SQLException. http://stackoverflow.com/questions/1259222/how-to-access-internal-class-using-reflection .... http://msdn.microsoft.com/en-us/library/ms229394(v=vs .100) .aspx ... entonces haz un lamda para crearlo y lanzarlo. –