使用NUnit按顺序运行TestFixtures

本文关键字:运行 TestFixtures 顺序 NUnit 使用 | 更新日期: 2023-09-27 18:01:25

我需要在我的NUnit c#应用程序中订购测试装置。我有一个关于如何从本页运行有序测试方法的示例,并且我已经尝试使用示例应用程序中提供的相同方法为测试fixture实现相同的逻辑。在我们的应用中每个类的测试夹具是分开的,每个测试夹具有一个测试方法。我们最近的尝试是使用父测试Fixture,它继承自一个名为OrderedTestFixture的类(与示例中相同),它具有以下方法:

public IEnumerable<NUnit.Framework.TestCaseData> TestSource
{
    get
    {
        var assembly = Assembly.GetExecutingAssembly();
        foreach (var order in methods.Keys.OrderBy(x => x))
        {
            foreach (var methodInfo in methods[order])
            {
                MethodInfo info = methodInfo;
                yield return new NUnit.Framework.TestCaseData(
                    new TestStructure
                    {
                        Test = () =>
                        {
                            object classInstance = Activator.CreateInstance(info.DeclaringType, null);
                            info.Invoke(classInstance, null);
                        }
                    }).SetName(methodInfo.Name);
            }
        }
    }
}

这个方法应该按顺序返回将要执行的测试方法。然而,即使它按顺序返回测试方法,它也不能按顺序执行它们。

我使用与应用程序示例相同的完全逻辑。一个orderedtestatattribute类,它继承了Attribute,将像这样放置在每个测试方法中:

[Test]
[OrderedTest(1)]
[BeforeAfterTest]
public void TestMethod() { }

有没有人在那里有任何想法,我怎么能使这项工作不改变我目前的实现有一个testFixture与一个测试类分开?

使用NUnit按顺序运行TestFixtures

好的,如果我理解正确的话,您想要跨多个testfixture进行测试。所以在这种情况下,你不想使用OrderedTestFixture,因为它是专门为不跨多个fixture运行测试而创建的。如果你从前面的问题中查看我的GitHub repo,你会想要遵循示例2的代码。注意,在这种情况下,你应该只使用OrderedTest属性——使用Test会把所有的事情都扔掉,因为它只是由NUnit随机调度,而不是通过使用TestCaseData进行排序。要了解更多细节,请参阅我的博客文章。

希望对你有帮助。