2013-06-20 37 views
1

我想爲我的應用程序寫一個測試,以便在數據庫調用中引發OdbcException。但是,OdbcException沒有公共構造函數,這意味着我無法創建一個新類型的異常,我不能嘲笑它。無法模擬OdbcException

通常使用起訂量我會嘲笑像這樣的例外:

_dataAccess.Setup(dataAccess => dataAccess.MethodToTest()).Throws<SqlException>(); 

有嘲諷OdbcException這樣我就可以測試我的功能的另一種方式?它從DbException繼承,它也沒有公共構造函數,就我所嘗試的那樣。

回答

1
  1. 可能使用反射和/或Activator.CreateInstance來創建它。或者2.編寫一些拋出異常的代碼,並使用它來生成所述異常作爲該方法的返回類型。 :)
+1

Activator.CreateInstance不會工作,但我也嘗試你的第二個建議,這似乎是可用的,我看不到解決這個問題的更好方法 – Serberuss

+0

令人討厭的,不是嗎? – Haney

+0

你可以擴展第二點嗎?我試圖理解並使用它!我面臨和可能需要自定義異常的問題 - http://stackoverflow.com/questions/38209450/repeating-odbcexception-c-sharp – sethu

2

我遇到了類似的問題,並通過創建我自己的自定義異常繼承DbException解決它。這將適用於OdbcException或OleDbException,因爲它們是DbExceptions。

我定製DbException類:

public class CustomTestDbException : DbException 
{ 
} 

我的模擬代碼:

myMock.Setup(mockObject => mockObject.MyMethod()).Throws(new CustomTestDbException()); 
+0

不完全相同的事情,但DbException可能是一個更好的東西,因爲無論如何捕捉它獨立於驅動程序。 –