MSTest中的ClassCleanup是静态的,但构建服务器使用nunit来运行单元测试。我怎么调整?

时间:2010-05-19 23:26:28

标签: c# unit-testing nunit mstest

MSTest有一个[ClassCleanup()]属性,据我所知,它需要是静态的。我喜欢在我的单元测试运行后运行,并清理我的数据库。这一切都很好,但是当我去我们的构建服务器并使用我们的Nant构建脚本时,似乎单元测试是使用NUnit运行的。 NUnit似乎不喜欢清理方法是静态的。因此它忽略了我在该课程中的测试。我该怎么做才能解决这个问题?我更喜欢不使用[TestCleanUp()],因为每次测试后都会运行它。有没有人有什么建议?我知道[TestCleanup()]有助于解耦,但在这种情况下我更喜欢[ClassCleanup()]。这是一些示例代码。

  ////Use ClassCleanup to run code after all tests have run
    [ClassCleanup()]
    public static void MyFacadeTestCleanup()
    {

        UpdateCleanup();

    }


    private static void UpdateCleanup()
    {
        DbCommand dbCommand;
        Database db;

        try
        {

            db = DatabaseFactory.CreateDatabase(TestConstants.DB_NAME);
            int rowsAffected;

            dbCommand = db.GetSqlStringCommand("DELETE FROM tblA WHERE biID=@biID");
            db.AddInParameter(dbCommand, "biID", DbType.Int64, biToDelete);
            rowsAffected = db.ExecuteNonQuery(dbCommand);
            Debug.WriteLineIf(rowsAffected == TestConstants.ONE_ROW, string.Format("biId '{0}' was successfully deleted.", biToDelete));

        } catch (SqlException ex) {



        } finally {
            dbCommand = null;
            db = null;

            biDelete = 0;

        }
    }

感谢任何指示,是的,我知道我没有抓到任何东西。我需要先通过这个障碍。

干杯, 〜在圣地亚哥

1 个答案:

答案 0 :(得分:3)

您的构建服务器忽略了您的测试,因为MSTest使用一组不同的属性来指定NUnit使用的测试。如果您没有看到任何的测试,那么这更有可能是您遇到的问题。

例如:MSTest使用[TestClass][TestMethod]来指定测试装置和测试,而NUnit使用[TestFixture][Test]

此外,NUnit相当于[ClassCleanup][TestFixtureTearDown],并且它不是静态的。

请记住,如果您的测试绝对必须在MSTest和NUnit上运行,您可以使用两个框架的属性来装饰测试,它将起作用(在某种程度上,无论如何)。但是,为了获得两者的ClassCleanup行为,你需要这样的东西:

[ClassCleanup]
public static void MSTestClassCleanup()
{
    CommonCleanup();
}

[TestFixtureTearDown]
public void NUnitTearDown()
{
    CommonCleanup();
}

public static void CommonCleanup()
{
    // Actually clean up here
}