大家好我在为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个测试,如何通过GUI实现相同的结果?
P.S。抱歉我的英语不好。
也许我应该提一下,我在Rider的Ubuntu下工作
答案 0 :(得分:1)
Char.IsDigit()
通常不太准确。你的循环正在生成许多相同的测试,因为它们都是从同一个种子开始的。为什么你使用种子而不是简单地让Random自己工作?
不同的跑步者将以不同的方式处理相同的测试。如果您指明用于执行测试的跑步者,我可以使用更多信息编辑此答案。但是,一般来说,您肯定不希望使用相同的数据生成一堆测试。他们不为你做任何事情!
答案 1 :(得分:0)
原因是TestExplorer会查看测试用例的名称,并用相同的名称进行分组。因此,您不会看到所有测试用例的结果。由于原因是TestExplorer,因此使用控制台运行测试不会遇到相同的问题。有关详细信息,请查看此issue。根据问题,有两种解决方案:
ToString()
方法
使其为每个测试用例返回唯一的值。TestCaseData
类及其方法SetName
为每个测试设置唯一的名称。