public void エラーコールバックを指定するとエラー時に呼ばれる()
        {
            // Arrange
            int retryCount = 3;
            int interval   = 100;

            // Act
            List <bool> tmpList = new List <bool>();

            int _count = 0;

            RetryHandler.Execute(retryCount, interval, () =>
            {
                tmpList.Add(true);
                throw new Exception();
            }, (info) =>
            {
                // Assert
                Assert.AreEqual <int>(info.RetryCount, ++_count);
                Assert.IsNotNull(info.Cause);
            });

            // Assert
            Assert.AreEqual <int>(4, tmpList.Count);
        }
        public void エラーが発生していてもリトライ中に処理が成功したら例外は発生しない()
        {
            // Arrange
            int retryCount = 3;
            int interval   = 100;

            // Act
            List <bool> tmpList = new List <bool>();

            try
            {
                int count = 0;
                RetryHandler.Execute(retryCount, interval, () =>
                {
                    if (Interlocked.Increment(ref count) <= 3)
                    {
                        throw new Exception();
                    }

                    tmpList.Add(true);
                });
            }
            catch (RetryException ex)
            {
                // Assert
                Assert.Fail("例外が発生している");
            }

            // Assert
            Assert.AreEqual <int>(1, tmpList.Count);
        }
        public void エラーコールバック内でリトライ停止設定するとリトライが中断される()
        {
            // Arrange
            int retryCount = 3;
            int interval   = 100;

            // Act
            List <bool> tmpList = new List <bool>();

            int _count = 0;

            RetryHandler.Execute(retryCount, interval, () =>
            {
                tmpList.Add(true);
                throw new Exception();
            }, (info) =>
            {
                // Assert
                Assert.AreEqual <int>(info.RetryCount, ++_count);
                Assert.IsNotNull(info.Cause);

                if (_count == 2)
                {
                    info.RetryStop = true;
                    return;
                }
            });

            // Assert
            Assert.AreEqual <int>(3, tmpList.Count);
        }
        public void エラーが発生した場合指定された回数分リトライ処理を行う()
        {
            // Arrange
            int retryCount = 3;
            int interval   = 100;

            // Act
            List <bool> tmpList = new List <bool>();

            try
            {
                RetryHandler.Execute(retryCount, interval, () =>
                {
                    tmpList.Add(true);
                    throw new Exception();
                });
            }
            catch (RetryException ex)
            {
                // Assert
                Assert.AreEqual <int>(4, ex.ExceptionList.Count);
            }

            // Assert
            Assert.AreEqual <int>(4, tmpList.Count);
        }
        public void エラーが無い状態だと一回だけ実行される()
        {
            // Arrange
            int retryCount = 3;
            int interval   = 500;

            // Act
            List <bool> tmpList = new List <bool>();

            RetryHandler.Execute(retryCount, interval, () =>
            {
                tmpList.Add(true);
            });

            // Assert
            Assert.AreEqual <int>(1, tmpList.Count);
        }