zerlei
bff3e114fc
1. 撤回到测试按照规定顺序执行,原因是不同的测试方法会操作相同的文件目录,不按照顺序的并发执行会导致冲突,还有,单元测试是从微小功能递增到复杂功能,按照顺序执行有助于问题排查 2. 每个测试case 仍然是独立的。
42 lines
1.4 KiB
C#
42 lines
1.4 KiB
C#
using Xunit.Abstractions;
|
|
using Xunit.Sdk;
|
|
using XUnit.Project.Attributes;
|
|
|
|
namespace XUnit.Project.Orderers;
|
|
|
|
public class PriorityOrderer : ITestCaseOrderer
|
|
{
|
|
public IEnumerable<TTestCase> OrderTestCases<TTestCase>(
|
|
IEnumerable<TTestCase> testCases) where TTestCase : ITestCase
|
|
{
|
|
string assemblyName = typeof(TestPriorityAttribute).AssemblyQualifiedName!;
|
|
var sortedMethods = new SortedDictionary<int, List<TTestCase>>();
|
|
foreach (TTestCase testCase in testCases)
|
|
{
|
|
int priority = testCase.TestMethod.Method
|
|
.GetCustomAttributes(assemblyName)
|
|
.FirstOrDefault()
|
|
?.GetNamedArgument<int>(nameof(TestPriorityAttribute.Priority)) ?? 0;
|
|
|
|
GetOrCreate(sortedMethods, priority).Add(testCase);
|
|
}
|
|
|
|
foreach (TTestCase testCase in
|
|
sortedMethods.Keys.SelectMany(
|
|
priority => sortedMethods[priority].OrderBy(
|
|
testCase => testCase.TestMethod.Method.Name)))
|
|
{
|
|
Console.WriteLine(testCase);
|
|
yield return testCase;
|
|
}
|
|
}
|
|
|
|
private static TValue GetOrCreate<TKey, TValue>(
|
|
IDictionary<TKey, TValue> dictionary, TKey key)
|
|
where TKey : struct
|
|
where TValue : new() =>
|
|
dictionary.TryGetValue(key, out TValue? result)
|
|
? result
|
|
: (dictionary[key] = new TValue());
|
|
}
|