public async Task VerifyTwoDifferentGenericCallsWithSameSqlWhenSettingEnabled() { var settings = new Settings { ResetDapperCachePerCommand = true }; var connectionFactory = new Mock <IDbConnectionFactory>(); var connection = new MockDbConnection(settings); var repository = new SampleRepository(connectionFactory.Object); connectionFactory .Setup(f => f.OpenConnection()) .Returns(connection); await repository.GetCarAsync("reg"); await repository.GetCarCountAsync("reg"); connection.Verify(c => c.QuerySingleAsync <Car>(@"select * from [Cars] where Registration = @registration", It.IsAny <object>(), It.IsAny <IDbTransaction>(), null, null)); connection.Verify(c => c.QuerySingleAsync <int>(@"select * from [Cars] where Registration = @registration", It.IsAny <object>(), It.IsAny <IDbTransaction>(), null, null)); }
public async Task VerifyTwoDifferentGenericCallsWithSameSql() { var connectionFactory = new Mock <IDbConnectionFactory>(); var connection = new MockDbConnection(); var repository = new SampleRepository(connectionFactory.Object); connectionFactory .Setup(f => f.OpenConnection()) .Returns(connection); await repository.GetCarAsync("reg"); Assert.That( async() => await repository.GetCarCountAsync("reg"), Throws.InvalidOperationException.And.Message.EqualTo(@"Unable to detect the required response type for the command, it could be one of 2 possible options. Command: 'select * from [Cars] where Registration = @registration' Parameters: `registration = reg` CommandType: Text To be able to Verify the Dapper call accurately the Command and Parameters (and return type) must be unique for every invocation of a Dapper method. Possible options: `Dapper.MoqTests.Samples.Car`, `System.Int32` If this issue cannot be resolved, consider setting `Dapper.MoqTests.Settings.ResetDapperCachePerCommand` to `true`, note this is not a thread-safe approach").Using(_comparer)); connection.Verify(c => c.QuerySingleAsync <Car>(@"select * from [Cars] where Registration = @registration", It.IsAny <object>(), It.IsAny <IDbTransaction>(), null, null)); try { connection.Verify(c => c.QuerySingleAsync <int>(@"select * from [Cars] where Registration = @registration", It.IsAny <object>(), It.IsAny <IDbTransaction>(), null, null)); } catch (System.Exception exc) { Assert.That(exc.Message.Trim(), Is.EqualTo(@"Expected invocation on the mock at least once, but was never performed: c => c.QuerySingleAsync<int>(Match.Create<string>(Predicate<string>, () => ""select * from [Cars] where Registration = @registration""), It.IsAny<object>(), It.IsAny<IDbTransaction>(), null, null) Performed invocations: Mock<MockDatabase:6> (c): MockDatabase.QuerySingleAsync<Car>(""select * from [Cars] where Registration = @registration"", { registration = reg }, null, null, null)").Using(_comparer)); } }