Example #1
0
        public void ShouldAddAndExecuteActions() // Добавляем задачи и проверяем, что выполнено ровно столько задач, сколько добавлено
        {
            var testHelperMock = new Mock <TestHelper>();
            var obj            = testHelperMock.Object;

            using (var pool = new TestThreadPool(maxTasks: 3))
            {
                pool.Add(obj.DoNothing);
                pool.Add(obj.DoNothing);
                pool.Add(obj.DoNothing);
            }

            VerifyActionCallTimes();

            testHelperMock.Invocations.Clear();

            using (var pool = new TestThreadPool(maxTasks: 3))
            {
                var added = pool.TryAdd(obj.DoNothing);
                Assert.AreEqual(expected: true, actual: added);

                added = pool.TryAdd(obj.DoNothing);
                Assert.AreEqual(expected: true, actual: added);

                added = pool.TryAdd(obj.DoNothing);
                Assert.AreEqual(expected: true, actual: added);
            }

            VerifyActionCallTimes();

            void VerifyActionCallTimes() =>
            testHelperMock.Verify(t => t.DoNothing(), Times.Exactly(3), "The number of the tasks added and executed should match.");
        }
Example #2
0
        public void ShouldFailToAddNullAction() // Падаем при попытках добавить null
        {
            Assert.ThrowsException <ArgumentNullException>(() => {
                using (var pool = new TestThreadPool(maxTasks: 2))
                    pool.Add(null);
            });

            Assert.ThrowsException <ArgumentNullException>(() => {
                using (var pool = new TestThreadPool(maxTasks: 2))
                    pool.TryAdd(null);
            });
        }
Example #3
0
        public void ShouldFailToAddActionToDisposedPool() // Падаем или false при попытке добавить задачу после вызова Dispose
        {
            var pool = new TestThreadPool(maxTasks: 2);

            using (pool)
            {
            }

            Assert.ThrowsException <ObjectDisposedException>(() => {
                pool.Add(EmptyAction);
            });

            var addedToDisposedPool = pool.TryAdd(EmptyAction);

            Assert.AreEqual(expected: false, actual: addedToDisposedPool);
        }