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을위한 테스트하기 위해
테스트간에 변경 될 가능성이 가장 높은 코드를 확인하고 각 테스트에 필요한 변경을 허용하는 추상 기본 테스트 클래스를 만듭니다. – Nkosi
유효성 검사를 위해 어떤 동작을하는지 자문 해보십시오. 래퍼 클래스를 작성하여 데이터베이스에 의존하는 다른 코드를 단위 테스트 할 수 있습니다. 랩퍼를 명시 적으로 테스트 할 필요는 없습니다. 랩퍼의 철저한 유효성을 검사 할 데이터베이스 추상화를 사용하는 곳에서 메소드를 통합 테스트해야합니다. –
@ 대니얼 만 예. 그것은 mysql, SQL 서버 및 SQL 서버 컴팩트 에디션에서 작동하도록되어있는 데이터 액세스 레이어의 래퍼 클래스입니다. 그것을위한 통합 테스트를 작성하면 안됩니까? –