C# 在NUnit中捕获断言失败的正确方法
我正在为我的数据库编写一个集成测试,我有一个问题。在测试方法开始时,我将向数据库添加一些对象,在方法结束时,我应该删除它 所以我有这样一个代码:C# 在NUnit中捕获断言失败的正确方法,c#,nunit,assert,C#,Nunit,Assert,我正在为我的数据库编写一个集成测试,我有一个问题。在测试方法开始时,我将向数据库添加一些对象,在方法结束时,我应该删除它 所以我有这样一个代码: var group = new ContactGroup { Name = UserLogin + "_test_group" }; group.ID = _provider.AddGroup(UserLogin, group); Assert.That(_provider.GetGroup(UserLogin, group.ID), Is.Not.N
var group = new ContactGroup { Name = UserLogin + "_test_group" };
group.ID = _provider.AddGroup(UserLogin, group);
Assert.That(_provider.GetGroup(UserLogin, group.ID), Is.Not.Null);
_provider.RemoveGroup(UserLogin, group.ID);
关键是,如果断言失败,则不会执行RemoveGroup。我能怎么办
如果我尝试这样做:
var group = new ContactGroup { Name = UserLogin + "_test_group" };
group.ID = _provider.AddGroup(UserLogin, group);
try
{
Assert.That(_provider.GetGroup(UserLogin, group.ID), Is.Not.Null);
}
finally
{
_provider.RemoveGroup(UserLogin, group.ID);
}
我应该像这样重复断言异常吗
catch (AssertionException)
{
throw;
}
?使用a拆卸方法。拆卸方法在每次测试后立即执行
[TearDown]
public void TearDown()
{
_provider.RemoveGroup(UserLogin, group.ID);
}
在数据库集成测试中处理清理的一种方法是在事务中执行测试,然后在测试完成后回滚。DBUnit人员建议在启动时而不是关闭时进行销毁(),这就是我所做的。因此,测试的开始会删除测试不需要的任何数据。您根本不需要at
catch
子句。在C#中,try{…throw…}finally{…}
将执行finally
子句,然后将异常发送到堆栈上最近的catch
,如果没有异常,则发送到程序顶部。因此
try {
Assert.Fail("BOOM!");
} finally {
Cleanup();
}
将完全按照您的要求执行:运行
Cleanup()
,然后从断言中退出。+1还有一个类fixture的分解,另一个名称空间的分解。我仅在选定的方法中创建此组。有没有其他方法来管理这个问题,因为我不想在我不需要的时候创建组(在每次测试之前)?该死,太简单了:)谢谢!