public async Task SafeExecuteDbCommandAction_Should_Execute_MultipleTimes_Defined_By_RetryPolicy_And_But_Should_Throw_Exception() { // Arrange var mockFakeFuncInterface = new Mock <IFakeFuncInterface>(); mockFakeFuncInterface.Setup(x => x.DoSomething()).Throws <Exception>(); RetryPolicyOption retry = new RetryPolicyOption(); retry.MaxRetries = 10; retry.ShouldRetryOn <Exception>(); Func <Task <DbCommandResult> > execution = () => FluentDbCommandBase.SafeExecuteDbCommandAction(() => mockFakeFuncInterface.Object.DoSomething(), retry, true); // Assert await Assert.ThrowsAnyAsync <RetryReachedException>(execution); mockFakeFuncInterface.Verify(x => x.DoSomething(), Times.Exactly(10)); }
public async Task SafeExecuteDbCommandAction_Should_Execute_MultipleTimes_Defined_By_RetryPolicy_And_But_ShouldNot_Throw_Exception() { // Arrange var mockFakeFuncInterface = new Mock <IFakeFuncInterface>(); mockFakeFuncInterface.Setup(x => x.DoSomething()).Throws <Exception>(); RetryPolicyOption retry = new RetryPolicyOption(); retry.MaxRetries = 10; retry.ShouldRetryOn <Exception>(); // Act var result = await FluentDbCommandBase.SafeExecuteDbCommandAction(() => mockFakeFuncInterface.Object.DoSomething(), retry, false); // Assert Assert.False(result.IsSuccess); Assert.NotNull(result.Exception); Assert.IsType <RetryReachedException>(result.Exception); mockFakeFuncInterface.Verify(x => x.DoSomething(), Times.Exactly(10)); }
public async Task SafeExecuteDbCommandAction_Should_Execute_Once_With_RetryPolicy_And_NoException() { // Arrange var mockFakeFuncInterface = new Mock <IFakeFuncInterface>(); mockFakeFuncInterface.Setup(x => x.DoSomething()).Returns(Task.FromResult <DbCommandResult>(new DbCommandResult() { Exception = null, IsSuccess = true, Result = 1 })); RetryPolicyOption retry = new RetryPolicyOption(); retry.MaxRetries = 10; retry.ShouldRetryOn <Exception>(); // Act var result = await FluentDbCommandBase.SafeExecuteDbCommandAction(() => mockFakeFuncInterface.Object.DoSomething(), retry, true); // Assert Assert.True(result.IsSuccess); Assert.Null(result.Exception); Assert.Equal(1, result.Result); mockFakeFuncInterface.Verify(x => x.DoSomething(), Times.Once); }