如何拆除集成测试

时间:2012-10-03 12:53:18

标签: c# visual-studio-2010 visual-studio unit-testing

我想对我的项目进行一些集成测试。现在我正在寻找一种机制,允许我在所有测试开始之前执行一些代码,并在所有测试结束后执行一些代码。

请注意,我可以为每个测试设置方法和拆除方法,但我需要为所有测试提供相同的功能。

请注意,我使用的是Visual Studio,C#和NUnit。

1 个答案:

答案 0 :(得分:1)

使用NUnit.Framework.TestFixture属性注释您的测试类,并使用NUnit.Framework.TestFixtureSetUp和NUnit.Framework.TestFixtureTearDown注释所有测试设置和所有测试拆解方法。

这些属性的功能类似于SetUp和TearDown,但每个灯具只运行一次方法,而不是每次测试前后。

编辑回应评论: 为了让所有测试完成后运行一个方法,请考虑以下内容(不是最干净但我不确定更好的方法):

internal static class ListOfIntegrationTests {
    // finds all integration tests
    public static readonly IList<Type> IntegrationTestTypes = typeof(MyBaseIntegrationTest).Assembly
        .GetTypes()
        .Where(t => !t.IsAbstract && t.IsSubclassOf(typeof(MyBaseIntegrationTest)))
        .ToList()
        .AsReadOnly();

    // keeps all tests that haven't run yet
    public static readonly IList<Type> TestsThatHaventRunYet = IntegrationTestTypes.ToList();
}

// all relevant tests extend this class
[TestFixture]
public abstract class MyBaseIntegrationTest {
    [TestFixtureSetUp]
    public void TestFixtureSetUp() { }

    [TestFixtureTearDown]
    public void TestFixtureTearDown() {
        ListOfIntegrationTests.TestsThatHaventRunYet.Remove(this.GetType());
        if (ListOfIntegrationTests.TestsThatHaventRunYet.Count == 0) {
            // do your cleanup logic here
        }
    }
}