アプリケーションのデータベース関連機能の単体テストを実装する抽象クラスを設計したいと考えています。CreateDatabase または ConnectToExistingDatabase を呼び出す場合、クラスのプライベート セクションにデータベース情報を保存します。
type
TTestDatabase = class
FDatabaseConnection: TADOConnection;
private
FServerName: string;
FDatabaseName: string;
FPathtoSqlScripts: string;
public
procedure CreateDatabase(AServerName, ADatabaseName,
APathtoSqlScripts: string);
procedure ConnectToExistingDatabase(AServerName, ADatabaseName: string);
function DropDatabase: Boolean;
end;
procedure TTestDatabase.ConnectToExistingDatabase(AServerName,
ADatabaseName: string);
begin
FServerName := AServerName;
FDatabaseName := ADatabaseName;
ConnecttoDatabase(FServerName, FDatabaseName, FDatabaseConnection);
end;
constructor TTestDatabase.Create;
begin
FDatabaseConnection := TADOConnection.Create(nil);
end;
procedure TTestDatabase.CreateDatabase(AServerName, ADatabaseName,
APathtoSqlScripts: string);
var
aSql: string;
begin
FServerName := AServerName;
FDatabaseName := ADatabaseName;
FPathtoSqlScripts := APathtoSqlScripts;
ADO_CreateDatabase(FDatabaseName, FServerName);
end;
function TTestDatabase.DropDatabase: Boolean;
var
aSql: string;
begin
// connect new to server
FServerName := MYSERVER;
FDatabaseConnection.Connected := False;
ConnecttoDatabase(FServerName, 'master', FDatabaseConnection);
// drop the database
FDatabaseName := 'TEST_DATABASE';
if (FDatabaseName <> '') then
begin
FDatabaseConnection.Execute('use master');
aSql := ' drop database ' + FDatabaseName;
FDatabaseConnection.Execute(aSql);
end
else
Result := False;
end;
問題: dropdatabase 関数を実行する場合、値 FDatabasename .... は常に空の文字列です。たとえば、再定義すると。FServername (コード例に示されているように) 問題は解決されましたが、これは受け入れられない解決策です ....
単体テスト関数の実行中に、クラスのプライベート セクションに値を格納できませんか????
これはユニット テスト コードです。まだ完成していません。問題が表示されることを願っています
procedure TestTTestDatabase.TestCreateDatabase;
var
aServerName: string;
aDatabaseName: string;
aPathtoSqlScripts: string;
begin
// TODO: Setup method call parameters
aServerName := MYSERVER;
aDatabaseName := 'TEST_UNITTEST';
aPathtoSqlScripts := 'C:\testpath\';
FTestDatabase.CreateDatabase(aServerName, aDatabaseName, aPathtoSqlScripts);
// TODO: Validate method results
end;
procedure TestTTestDatabase.TestConnectToExistingDatabase;
var
aServerName: string;
aDatabaseName: string;
begin
// TODO: Setup method call parameters
aServerName := MYSERVER;
aDatabaseName := 'TEST_UNITTEST';
try
FTestDatabase.ConnectToExistingDatabase(aServerName, aDatabaseName);
except
fail('connection to exception fails');
end;
// TODO: Validate method results
CheckTrue(FTestDatabase.Connection);
end;
procedure TestTTestDatabase.TestDropDatabase;
var
ReturnValue: Boolean;
begin
ReturnValue := FTestDatabase.DropDatabase;
// TODO: Validate method results
end;