Beispiel #1
0
        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));
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 /// <inheritdoc />
 public IFluentDbCommand WithRetry(RetryPolicyOption retryPolicy)
 {
     this.RetryPolicy = retryPolicy;
     return(this);
 }