2010-09-16 5 views
6

Per i miei test ho bisogno di prendere in giro il client di dati, nel mio caso sono Oracle.Come posso prendere in giro un OracleConnection e OracleCommand?

Ho creato il mio livello di accesso ai dati per permettere che questo essere passato in:

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

Sto usando Moq, se posso passare a un altro quadro, se necessario, e quando vado per creare gli oggetti Mock in questo modo:

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

ottengo questo errore:

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

Conclusione: Questo era più semplice di quanto pensassi! Basta prendere in giro la funzione di strato DAL in questo modo:

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

risposta

12

è possibile apportare modifiche usare Uso interfacce IDbConnection e IDbCommand (e hanno una fabbrica per fornire gli oggetti reali in codice principale e oggetti mock in prova - normalmente usando Dependency Injection)

Moq può solo prendere in giro interfacce e metodi virtuali.

0

Stai cercando di prendere in giro una classe sigillata: puoi guardare here.

BTW: come @Aliostad said, tale framework, la maggior parte dei framework finti che ho visto, può prendere in giro solo interfacce/classi astratte.