2010-07-28 4 views
1

저는 데이터베이스에 대한 통합 테스트를 작성 중이며 한 가지 질문이 있습니다. 테스트 메소드가 시작될 때 데이터베이스에 객체를 추가하고 메서드의 끝에서 객체를 제거해야합니다.NUnit에서 어설 션 오류를 잡을 수있는 올바른 방법

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; 
} 

같은 AssertionException을 다시 던진다해야합니까?

답변

4

한 가지 방법은 테스트가 완료되면 다음 롤백 트랜잭션에서 테스트를 실행하는 것입니다.

+0

젠장, 너무 쉬웠다 :) 고마워! – HiveHicks

1

분해 방법을 사용하십시오. Tear Down 방법은 매 테스트마다 실행됩니다. 데이터베이스 통합 테스트에서 정리를 처리 할 수 ​​

[TearDown] 
    public void TearDown() 
    { 
     _provider.RemoveGroup(UserLogin, group.ID); 
    } 
+0

+1 클래스 고정구에 대한 해체 및 네임 스페이스에 대한 또 다른 해체가 있습니다. –

+0

선택한 방법으로 만이 그룹을 만듭니다. 필요없는 경우 그룹을 만들지 않기 때문에 다른 방법으로 관리 할 수 ​​있습니까 (각 테스트 전에)? – HiveHicks

0

DBUnit 사람들은 시작시 종료 (no shutdown) (Good setup don't need cleanup!)에 대한 destorying을 권하고 있습니다. 따라서 테스트가 시작되면 테스트에서 예상하지 않는 데이터가 제거됩니다.

0

catch 절에는 전혀 필요하지 않습니다. C#에서 try {... throw ...} finally {...}finally 절을 실행 한 다음 가장 가까운 catch으로 예외를 보내거나없는 경우 프로그램의 맨 위 밖으로 나갑니다. 실행 Cleanup()를 다음 주장 사망 : 따라서

try { 
    Assert.Fail("BOOM!"); 
} finally { 
    Cleanup(); 
} 

은 당신이 원하는 것을 정확히 할 것입니다.

관련 문제