2012-05-09 3 views
0

unit 데이터베이스와의 통합 테스트를 작성하려면 어떻게해야합니까? 예컨대 : 내가 버그이 코드합니다 (IRecordset 반환 빈 레코드)를 몰아하려고이 경우데이터베이스 쿼리를 사용하여 개체를 통합 테스트하는 방법

public int GetAppLockCount(DbConnection connection) 
{ 
    string query := 
      "SELECT"+CRLF+ 
      " tl.resource_type AS ResourceType,"+CRLF+ 
      " tl.resource_description AS ResourceName,"+CRLF+ 
      " tl.request_session_id AS spid"+CRLF+ 
      "FROM sys.dm_tran_locks tl"+CRLF+ 
      "WHERE tl.resource_type = 'APPLICATION'"+CRLF+ 
      "AND tl.resource_database_id = ("+CRLF+ 
      " SELECT dbid"+CRLF+ 
      " FROM master.dbo.sysprocesses"+CRLF+ 
      " WHERE spid = @@spid)"; 

    IRecordset rdr = Connection.Execute(query); 

    int nCount = 0; 
    while not rdr.EOF do 
    { 
     nCount := nCount+1; 
     rdr.Next; 
    } 

    return nCount; 
} 

.

[UnitTest] 
void TestGetLockCountShouldAlwaysSucceed(); 
{ 
    DbConnection conn = GetConnectionForUnit_IMean_IntegrationTest(); 
    GetAppLockCount(conn); 
    CheckTrue(True, "We should reach here, whether there are app locks or not"); 
} 

지금 내가 필요는 단위 통합 테스트를 실행할 때 일부 데이터베이스를 연결하는 방법입니다.

사람들이 테스트 러너가 찾을 연결 문자열을 어딘가에 저장합니까? A .ini 또는 .xml 또는 .config 파일?


참고 : 언어/불가지론 프레임 워크. 그 시점 홈을 구동하기 위해

  • C#을
  • 델파이
  • ADO.net
  • ADO
  • NUnit과
  • 은 DUnit

: 코드는 의도적으로의 요소가 포함되어 있습니다.

답변

1

이제 단위 통합 테스트를 실행할 때 일부 데이터베이스에 연결하는 방법이 필요합니다.

기존 데이터베이스 또는 메모리 내장 데이터베이스를 사용하십시오. 저는 현재 ant 파일에서 Liquibase 스크립트를 사용하여 splatted 및 rebuilt 된 기존 데이터베이스를 사용하려고 시도했습니다. 메모리 내장의 장점 - 다른 응용 프로그램에 종속되지 않습니다. 단점 - 실제로는 아니지만 시작하는 데 시간이 걸릴 수 있습니다. 실제 데이터베이스의 장점 - 실제와 동일 할 수 있음 단점 - 타사 컴퓨터에 액세스해야합니다. 새 사용자 설정 (새 데이터베이스 만들기)

테스트 러너가 연결 문자열을 검색 어딘가에 저장할 수 있습니까? .ini 또는 .xml 또는 .config 파일?

Yeap. C#에서는 .config 파일을 java의 .props 파일에 사용했습니다. 인 메모리를 사용하면 각 사람마다 동일하게 버전 컨트롤에 던져 넣을 수 있습니다. 실제 데이터베이스는 각 사용자마다 다를 필요가 있습니다.

또한 시드 데이터를 고려해야합니다. 자바에서는 과거에 dbUnit을 사용했습니다. 가장 읽을 수있는 것은 아니지만 작동합니다. 이제 Ruby ActiveRecord 작업을 사용합니다.

어떻게 시작하나요? 먼저 데이터베이스를 다시 빌드 할 수 있습니까? 이 도로를 멀리 떨어 뜨리기 전에 이것을 자동화 할 수 있어야합니다.

다음 테스트를 위해 빈 로컬 데이터베이스를 구축해야합니다. 개발자 당 한 명씩, 다른 일부 팀은 공유하지만 커밋하지 않습니다. .NET/MS SQL 세계에서 나는 생각하기에 아주 쉽게 할 수 있습니다.

관련 문제