2010-09-16 68 views
6

對於我的測試,我需要嘲笑數據客戶端,在我的情況下他們是Oracle。如何模擬OracleConnection和OracleCommand?

我創建了我的數據訪問層允許這種在傳遞:

public static Int32? GetUserRoleId(string userName, OracleConnection cn, OracleCommand cmd) 

我用的起訂量,但如果需要,我可以切換到另一種框架,而當我去創建Mock對象像這樣:

Mock<OracleConnection> mockOracleConnection = new Mock<OracleConnection>(); 
Mock<OracleCommand> mockOracleCommand = new Mock<OracleCommand>(); 

我得到這個錯誤:

Failure: System.ArgumentException : Type to mock must be an interface or an abstract or non-sealed class.

結論: 這比我想象的更簡單!只是嘲笑DAL層的功能是這樣的:

mockDao.Setup(a => a.GetUserRoleId(userName, It.IsAny<OracleConnection>(), It.IsAny<OracleCommand>())).Returns(1); 

回答

12

您可以更改使用的IDbConnection和IDbCommand的(使用的界面,並有廠家提供的測試在主代碼的實物和模擬對象 - 通常使用依賴注入)

Moq只能模擬接口和虛擬方法。

0

你試圖模擬一個密封的類:你可以看看here

作爲@Aliostad said,這樣的框架 - 我見過的大多數模擬框架 - 只能模擬Interfaces/Abstract類。