2017-05-08 1 views
0

나는 이라는 클래스가 있습니다. 데이터베이스이 인터페이스는 다음과 같은 인터페이스를 구현합니다. 이름으로 통합 테스트 데이터 액세스 코드

public interface IDatabase 
{ 
    int ExecuteNonQuery(string command, CommandType commandType, Dictionary<string, object> parameters); 
} 

ExecuteNonQuery는 기능이 제공 불가지론 방법으로 비 쿼리 데이터베이스 명령을 실행 나타냅니다.

이 클래스에 대한 통합 테스트를 작성해야하며, 지금까지 Sql Server Compact Edition에 대한 통합 테스트를 작성했습니다.

통합 테스트 코드는 다음과 같습니다.

public class DatabaseIntegrationTests 
{ 
    private readonly string CurrentDir; 
    private readonly string SqlCeDbPath; 

    public DatabaseIntegrationTests() 
    { 
     CurrentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
     SqlCeDbPath = CurrentDir + @"\TestDb.sdf"; 
    } 

    [Fact] 
    public void ExecuteNonQuery_SqlServerCE_Should_Execute() 
    { 
     var dbConfFunc = this.InitializeSqlServerCeInstance(); 
     Database database = new Database(dbConfFunc); 
     database.ExecuteNonQuery("CREATE TABLE Test([ID] [bigint] IDENTITY(1,1) NOT NULL,[Message] [nvarchar](255) NULL)", 
      CommandType.Text, null); 

     var parameters = new Dictionary<string, object>(); 
     parameters.Add("@message", "Hello World!"); 
     database.ExecuteNonQuery("INSERT INTO Test(Message) VALUES(@message)", 
      CommandType.Text, parameters); 

     CleanUpSqlServerCe(); 
    } 
    private void CleanUpSqlServerCe() 
    { 
     if (File.Exists(SqlCeDbPath)) 
      File.Delete(SqlCeDbPath); 
    } 
    private Func<DbConnectionConfiguration> InitializeSqlServerCeInstance() 
    { 
     string connectionString = "Data Source=" + CurrentDir + @"\ASTest.sdf;Persist Security Info=False"; 

     CleanUpSqlServerCe(); 

     SqlCeEngine engine = new SqlCeEngine(connectionString); 
     engine.CreateDatabase(); 

     return() => 
     { 
      return new DbConnectionConfiguration() 
      { 
       DataProvider = "System.Data.SqlServerCe.4.0", 
       ConnectionString = connectionString 
      }; 
     }; 
    } 
} 

제 질문은 어떻게 MySql 및 SQL Server 데이터베이스 공급자에 대해이 클래스의 통합 테스트를 작성할 수 있습니까? 이 클래스의 통합 테스트를 작성하여 MySql 및 Sql Server 데이터베이스 모두에 대해 테스트하는 가장 실용적인 방법은 무엇입니까? MySQL을위한 테스트하기 위해

+1

테스트간에 변경 될 가능성이 가장 높은 코드를 확인하고 각 테스트에 필요한 변경을 허용하는 추상 기본 테스트 클래스를 만듭니다. – Nkosi

+1

유효성 검사를 위해 어떤 동작을하는지 자문 해보십시오. 래퍼 클래스를 작성하여 데이터베이스에 의존하는 다른 코드를 단위 테스트 할 수 있습니다. 랩퍼를 명시 적으로 테스트 할 필요는 없습니다. 랩퍼의 철저한 유효성을 검사 할 데이터베이스 추상화를 사용하는 곳에서 메소드를 통합 테스트해야합니다. –

+0

@ 대니얼 만 예. 그것은 mysql, SQL 서버 및 SQL 서버 컴팩트 에디션에서 작동하도록되어있는 데이터 액세스 레이어의 래퍼 클래스입니다. 그것을위한 통합 테스트를 작성하면 안됩니까? –

답변

관련 문제