Possuo a seguinte chamada:
Como faço para testar essa chamada, sendo que o Mock do DBS não instancia o SqlBuilder?
Possuo a seguinte chamada:
Como faço para testar essa chamada, sendo que o Mock do DBS não instancia o SqlBuilder?
É possível testar o DBS.SqlBuilder criando uma nova instância do DBS com ele mockado durante o processo de inicialização.
A solução que eu encontrei foi a seguinte:
private Mock<ISqlDialect> MockSqlDialect()
{
Mock<ISqlDialect> sqlDialectMock = new Mock<ISqlDialect>();
sqlDialectMock.Setup(x => x.ParameterPrefix).Returns('@');
sqlDialectMock.Setup(x => x.FormatSQL(It.IsAny<string>())).Returns((Func<string, string>)(sql => sql));
sqlDialectMock.Setup(x => x.CurrentDateTimeSql).Returns("CURRENT_TIMESTAMP");
return sqlDialectMock;
}
private Mock<IDapperConfiguration> MockDapper(Mock<ISqlDialect> dialect)
{
Mock<IDapperConfiguration> dapperMock = new Mock<IDapperConfiguration>();
dapperMock.Setup(x => x.Dialect).Returns(dialect.Object);
return dapperMock;
}
private Mock<ISqlBuilder> MockSqlBuilder(Mock<IDapperConfiguration> dapperMock, string sql)
{
Mock<ISqlBuilder> sqlBuilderMock = new Mock<ISqlBuilder>();
sqlBuilderMock.Setup(x => x.Configuration).Returns(dapperMock.Object);
sqlBuilderMock.Setup(x => x.Select(It.IsAny<IClassMapper>())).Returns(sql);
return sqlBuilderMock;
}
private void MockDBSWithSqlBuilder(string sql)
{
Mock<ISqlDialect> dialect = MockSqlDialect();
Mock<IDapperConfiguration> dapperMock = MockDapper(dialect);
Mock<ISqlBuilder> sqlBuilderMock = MockSqlBuilder(dapperMock, sql);
Mock<IDbServices> dbServiceMock = new Mock<IDbServices>();
dbServiceMock.Setup(x => x.SqlBuilder).Returns(sqlBuilderMock.Object);
requisitionObj.DBS = dbServiceMock.Object;
}