Nunit: TestCaseSource не ожидает генерации всех тестовых случаев? - PullRequest
0 голосов
/ 29 апреля 2018

Привет всем У меня есть проблема с генерацией тестовых случаев для TestCaseSource. Я написал этот код для тестов:

using System;
using System.Collections.Generic;
using System.Linq;

using NUnit.Framework;

namespace HeapSort.Tests
{
    [TestFixture]
    public class Tests
    {
        [Test, TestCaseSource(typeof(TestsGenerator),"TestCases")]
        public void IsEqualCollections(int[] received, int[] expected)
        {
            CollectionAssert.AreEqual(received, expected);
        }
    }

    public class TestsGenerator
    {
        public static IEnumerable<TestCaseData> TestCases
        {
            get
            {
                for (var i = 0; i < 25; i++)
                {
                    int[] t1 = GenerateCollection(i), t2 = t1.ToArray();
                    HeapSort.Sort(t1);
                    Array.Sort(t2);

                    yield return new TestCaseData(t1, t2);
                }
            }
        }

        private static int[] GenerateCollection(int seed)
        {
            var rnd = new Random(seed+DateTime.Now.Millisecond);
            int size = rnd.Next(100, 10000); 
            int[] array = new int[size];
                for (var i = 0; i < size; i++)
                    array[i] = rnd.Next(-100, 100);
            return array;

//            return Enumerable
//                .Repeat(100, rnd.Next(100, 10000))
//                .Select(i => rnd.Next(-100, 100))
//                .ToArray();
        }
    }
}

Где проблема? Вместо того, чтобы получить 25 тестов, я получаю от 1 до 8. И часто в начальной точке тестирования это показывает, что тесты 7/8, и в конце есть только один контрольный пример.

Как мне решить эту проблему?

UPD1 : Что интересно, когда я запускаю тесты через консоль, я обрабатываю все 25 тестов, как мне достичь тех же результатов через графический интерфейс!?

P.S. извините за мой плохой английский.

Возможно, стоит упомянуть, что я работаю под Ubuntu в Rider

1 Ответ

0 голосов
/ 29 апреля 2018

DateTime.Now обычно не очень точный. Ваш цикл генерирует много идентичных тестов, потому что все они начинаются с одного и того же семени. Почему вы используете seed, а не просто позволяете Random работать самостоятельно?

Разные бегуны будут по-разному обрабатывать идентичные тесты. Если вы укажете, какого бегуна вы используете для выполнения ваших тестов, я могу отредактировать этот ответ с более подробной информацией. Однако, в общем, вы, безусловно, не хотите создавать кучу тестов с одинаковыми данными. Они ничего не делают для вас!

...