For my tests I need to mock out the data client, in my case they are Oracle.
I have created my data access layer to allow this to be passed in:
public static Int32? GetUserRoleId(string userName, OracleConnection cn, OracleCommand cmd)
I am using Moq, though I can switch to another framework if needed, and when I go to create the Mock objects like this:
Mock<OracleConnection> mockOracleConnection = new Mock<OracleConnection>();
Mock<OracleCommand> mockOracleCommand = new Mock<OracleCommand>();
I get this error:
Failure: System.ArgumentException : Type to mock must be an interface or an abstract or non-sealed class.
Conclusion: This was more simple than I thought! Just mock the DAL layer function like this:
mockDao.Setup(a => a.GetUserRoleId(userName, It.IsAny<OracleConnection>(), It.IsAny<OracleCommand>())).Returns(1);
You can make changes to use IDbConnection and IDbCommand (use interfaces and have a factory to provide the real objects in main code and mock objects in test - normally using Dependency Injection)
Moq can only mock Interfaces and virtual methods.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.