2012-06-26 2 views
2

BizTalk 응용 프로그램에 대한 자동화 된 시스템 테스트를 작성하고 있지만 테스트의 검증을 실행할 수있는 시점을 결정하는 데 문제가 있습니다. 검증 전에 BizTalk가 메시지를 완전히 처리했는지 또는 메시지 처리 시간이 초과되었는지 확인해야합니다.BizTalk가 메시지 처리를 완료했는지 확인하는 방법

[Test] 
public void ReceiveValidTaskMessageTestShouldBeLoggedInMessageLog() 
{ 
    // Exercise    
    MsmqHelpers.SendMessage(InboundQueueName, ValidMessage); 

    // Verify 
    Assert.That(() => GetMessageCount("ReceiveError"), Is.EqualTo(0).After(1000)); 
    Assert.That(() => GetMessageCount("Receive"), Is.EqualTo(1).After(1000)); 
} 

마지막 두 줄은 SQL 서버의 테이블에있는 메시지의 사본의 존재를 확인, 성공적인 메시지에 대해 하나 개의 테이블에 오류가 하나 개의 테이블.

여기서 문제는 메시지를 보낸 직후에 오류 테이블에 메시지가 없는지 확인하는 것입니다. BizTalk가 아직 메시지를 처리하지 않았다면 실패 할 경우에도 해당 메시지가 전달됩니다.

[Test] 
public void ReceiveValidTaskMessageTestShouldBeLoggedInMessageLog() 
{ 
    // Exercise    
    MsmqHelpers.SendMessage(InboundQueueName, ValidMessage); 

    // Verify 
    Assert.That(() => PendingMessages, Is.EqualTo(0).After(1000)); 
    Assert.That(() => GetMessageCount("ReceiveError"), Is.EqualTo(0)); 
    Assert.That(() => GetMessageCount("Receive"), Is.EqualTo(1)); 
} 

답변

1

여기에서 자동화 된 통합 테스트에 문제가있다 :

우리가 필요한 것은이 같은 것입니다.

그런 테스트는 증거 기반이며 이는 테스트의 주장에 반영됩니다. 데이터베이스를 검사하여 처리가 수행되었다는 증거를 찾고 있습니다.

마찬가지로 처리가 완료되었음을 알기 위해이 문제가 발생했다는 증거를 찾고 있습니다. 예를 들어, 이론적으로 BizTalk 메시지 상자 데이터베이스에 대한 쿼리를 실행하여 해당 상태를 확인할 수 있습니다.

그러나 BizTalk는 테스트를 염두에두고 제작되지 않았기 때문에 이러한 종류의 검사에는 적합하지 않습니다 (약점 중 하나). 나는 이것을하는 방법을 확실히 알지 못할 것입니다.

고려 가치 접근 방법의 몇 :

  1. 가에 BizTalk 메시지 처리를 완료 할 수 있도록 데이터베이스 검사를 수행하기 전에 시간의 "합리적인"금액을 기다립니다.
  2. 데이터베이스를 확인하기 전에 확인할 수있는 처리 완료 직전에 BizTalk에서 로그 파일 (또는 다른 증거)을 출력하도록하십시오.

접근 방식이 제한적이지만 자동화 된 통합 테스트는 엄청나게 중요합니다.

0

더 나은 접근법은 레코드가 해당 테이블 중 하나에 나타나고 테스트를 적절하게 통과/실패 할 때 알림을받는 것입니다. 초보적인 무한 루프를 사용하여 지속적으로 테이블을 폴링하거나보다 효율적인 해결책은 이벤트를 사용하는 것입니다. 자세한 내용은 event handler delegate을 참조하십시오.

관련 문제