2011-03-15 2 views
1

두 개의 [TestMethods]가 있습니다. MethodA의 결과는 MethodB의 입력이어야합니다. 문제는 새로운 테스트 메소드가 시작될 때 모든 값과 변수가 재설정된다는 것입니다.VS 2010 : TestMethod의 결과를 다른 TestMethod에 전달하십시오.

누군가 이미 exact same question에 문의했지만 아직 실제 해결책이 없습니다.

Guid CustomerID; 

[TestMethod] 
public void CreateCustomer() 
{ 
    // Create a new customer and store the customer id 
    CustomerID = CreateNewCustomer(); 
    Assert.IsNotNull(...); 
} 

[TestMethod] 
public void DeleteCustomer() 
{ 
    // Delete the customer created before 
    var ok = DeleteCustomer(CustomerID); 
    Assert.IsNotNull(...); 
} 

나는이 테스트를위한 "공식적인"방법이 아니다는 것을 이해하지만, 내가 바라고 있어요 - 그래서 난 정말이 시나리오에 대한 실제적인 솔루션이 필요합니다 :

모든 내가 원하는는 작업에 다음과 같다 어떤 종류의 해결 방법.

아이디어가 있으십니까?

답변

1

고객 삭제 테스트에서 고객을 만들어 보지 않겠습니까?

[TestMethod] 
public void CreateCustomer() 
{ 
    // Create a new customer and store the customer id 
    var customerID = CreateNewCustomer(); 
    Assert.IsNotNull(...); 
} 

[TestMethod] 
public void DeleteCustomer() 
{ 
    // Delete the customer created before   
    var customerID = CreateNewCustomer(); 
    var ok = DeleteCustomer(customerID); 
    Assert.IsNotNull(...); 
} 

하거나 설정 한 testfixture에서 고객을 만듭니다

합니다 (TestFixtureSetUp의 이름은 VS 테스트 환경에서 다를 수 있습니다, 즉 그것이 NUnit과 호출되는 것입니다

하지만이있을 것이다 상당)

private Guid CustomerID; 

[TestFixtureSetUp] 
{ 
    **EDIT** you could ensure you DB is clean here: 
    CleanDB(); 
    CustomerID = CreateNewCustomer(); 
} 


[TestMethod] 
public void CreateCustomer() 
{ 
    // check previously created customer   
    Assert.IsNotNull(...); 
} 

[TestMethod] 
public void DeleteCustomer() 
{ 
    // Delete the customer created before   
    var ok = DeleteCustomer(CustomerID); 
    Assert.IsNotNull(...); 
} 

[TestFixtureTearDown] 
{ 
    **EDIT** or you could ensure you DB is clean here: 
    CleanDB(); 
} 

첫 번째 솔루션은 각각의 테스트로 내 의견에 더는 자신의 데이터를 만들기위한 책임이 있지만,이 경우 실제로 및 데이타베이스에서 물건을 가하고 통합 테스트는 다음 괜찮습니다 (내 의견으로는) 데이터가 부족한 것 해당 클래스에 대한 설정에서 수행 할 모든 테스트가 완료되면 모든 테스트가 데이터가있을 것으로 예상하여 실행할 수 있습니다. 각 테스트 클래스에는 해당 테스트 테스트가 다운되어 해당 클래스의 테스트 데이터가 db에서 제거되거나 각 테스트 클래스가 실행되기 전에 DB를 정리할 것임을 보장해야합니다 (공통 기본 클래스처럼)

+0

안녕 샘, 도와 주셔서 감사합니다. – Ingmar

+0

Sh ... hit 실수로 돌아 가기 ;-) 글쎄, 아이디어는 테스트 실행에서 새로운 고객을 생성 한 다음 똑같은 테스트를 다시 실행하여 동일한 고객을 삭제하는 것입니다. 결국, 결국 모든 것이 해결되면 데이터베이스는 각 테스트 후에 다시 비게됩니다. – Ingmar

+0

@Ingmar, 편집을 참조하십시오. DB가 실행 가능한 상태로 재설정되어 다른 테스트에 영향을주지 않도록 모든 것이 잘 작동하지 않는지 확인해야합니다. 이것은 TestFixtureSetup 또는 Tear Down 중 하나 일 수 있습니다. 나는이 정보를 포함하도록 편집 할 것입니다. –

1

각각의 [TestMethod]가 독립 실행 형이기 때문에 새 고객 생성과 같이 테스트 전제 조건으로 [TestInitialize] 메소드를 사용해야합니다.