2

我需要在我的 NUnit c# 应用程序中订购测试装置。我有一个关于如何从此页面运行有序测试方法的示例,并且我尝试使用示例应用程序中提供的相同方法为测试夹具实现相同的逻辑。在我们的应用程序中,每个类都有一个测试夹具,每个测试夹具都有一个测试方法。我们最近的尝试是使用继承自一个名为 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);
            }
        }
    }
}

该方法应该按顺序返回将要执行的测试方法。但是,即使它按顺序返回测试方法,也无法按顺序执行它们。

我使用的逻辑与 App 示例中的完全相同。一个从 Attribute 继承的 orderedTestAttrribute 类,它将被放置在每个测试方法中,如下所示:

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

有没有人知道如何在不改变我当前的实现的情况下完成这项工作,即分别拥有一个 testFixture 和一个测试类?

4

1 回答 1

1

好的,所以如果我理解正确,您想在多个 TestFixture 中进行测试。因此,在这种情况下,您不想使用 OrderedTestFixture,因为它是专门为不跨多个夹具运行测试而创建的。如果您从前面的问题中查看我的 GitHub 存储库,您将需要遵循示例 2 代码。请注意,在这种情况下,您应该只使用 OrderedTest 属性 - 使用 Test 会抛出整个事情,因为这样它只会由 NUnit 随机调度,而不是通过使用 TestCaseData 进行排序。请参阅我的博客文章了解更多详细信息。

希望有帮助。

于 2015-07-09T23:48:10.500 回答