测试失败后如何执行代码

时间:2015-05-05 10:15:16

标签: c# unit-testing mstest vs-unit-testing-framework

我正在为图书馆创建单元测试。这个库连接到数据源然后我正在做一些测试Stuff之后数据源将被断开连接。

  

如果其中一个测试失败,则方法终止,我无法执行断开连接功能。

以下是一个示例,以说明上述说明:

[TestMethod]
public void Test()
{
    var datasourceObject = new DatasourceObject("location-string");
    datasourceObject.Connect();

    // Do some Stuff with Asserts

    datasourceObject.Disconnect(); // must be executed
}

有没有实现这一目标的最佳实践?

1 个答案:

答案 0 :(得分:10)

如果您在其他测试中使用资源,请将其移至类字段并使用[TestInitialize][TestCleanup]获取并释放该资源:

private Foo datasourceObject;

[TestInitialize]
public void TestInitialize()
{
    this.datasourceObject = new DatasourceObject("location-string");
    this.datasourceObject.Connect();
}

[TestMethod]
public void Test()
{
    // Do some Stuff with Asserts
}

[TestCleanup]
public void TestCleanup()
{
    this.datasourceObject.Disconnect();
}

如果您仅在此测试中使用资源,请使用try .. finally

[TestMethod]
public void Test()
{
    try
    {
        var datasourceObject = new DatasourceObject("location-string");
        datasourceObject.Connect();
        // Do some Stuff with Asserts
    }
    finally
    {
        datasourceObject.Disconnect(); // must be executed
    }
}

如果资源是一次性的,则为using语句:

[TestMethod]
public void Test()
{
    using(var datasourceObject = new DatasourceObject("location-string"))
    {
        datasourceObject.Connect();
        // Do some Stuff with Asserts
    }
}