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;
}
}
感谢任何指示,是的,我知道我没有抓到任何东西。我需要先通过这个障碍。
干杯, 〜在圣地亚哥
答案 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
}