2

データベースに接続するメソッドを持つクラスは統合テストでテストする必要があるという別のドキュメントを読みました。例を見つけようとしましたが、理論だけが見つかりませんでした。私はテストの経験がほとんどありません。例を教えてください。リンク?、何か(私はたくさん読んでいるので、理論だけではなく)、このようなもので?これは珍しいケースではないと思います。php や sql などで可能であれば。

統合テストについて知らない場合、この種の問題をどのようにテストしますか?

class database{

public $server;
public $database;
public $password;
public $user;
public $descriptor;


function __construct(){
$this->server="localhost";
$this->database="mydb";
$this->user="stackoverflow";
$this->password="1234";

$this->descriptor=mysql_connect($this->server,$this->user,$this->password);
mysql_select_db($this->database,$this->descriptor); 
}


function make_request($query){
$response=mysql_query($query,$this->descriptor);
return $response;
}


function close_connection(){
mysql_close($this->descriptor);
}

function number_rows($result_query){
return mysql_num_rows($result_query);
}

}
4

2 に答える 2

4

ユニットテストについてはPHPUnitを調べてください。次に、モックオブジェクトを使用して依存関係(DB呼び出し)をシミュレートし、ダミーデータを返すことができます。データベースレイヤーではなく、ロジックの一部のユニットをテストしようとしているので、それは許容範囲内であり、コードが機能していることをある程度確信できるはずです。

もう1つのオプションは統合テストを使用することですが、これには、テストのセットアップと分解に多大な労力を費やす必要があります。テストに必要なデータがデータベース内に存在することを確認する必要があります。これらのタイプのテストにはトランザクションを使用するのが一般的であり、これらのテストの実行が終了した後にロールバックできます。

于 2012-10-21T23:59:14.313 に答える
1

テストしようとしているのはどのコードですか? databaseあなたのクラスを使用するコードですか?もしそうなら、あなたのクラスはすでに抽象化を提供しているので、PDO を導入する必要はありません( private のdatabase方がはるかに安全です)。public $descriptorそのため、まずクラスをモックしてdatabaseから、それを使用するコードをテストする必要があります。PHPUnit には洗練されたモック システムがあります。

テストしたいもう 1 つのことは、このdatabaseクラス自体ですか? その場合、MySQL データベースへの依存性と、それによるスピード ヒットを受け入れる必要があります。そのテスト用に完全に専用の MySQL データベースをセットアップします。速度の低下を気にしない場合は、関数でデータベースを作成し、setUp()関数での各テストの後にデータベースを削除することを検討してtearDown()ください。

テストしたい 3 番目のことは、Web サイト (または何でも) が全体として機能し、データベースなどに接続することです。これは機能テスト (統合テストとも呼ばれます) です。システムが Web サービス API を提供している場合は、それを使用してテストできます。それ以外の場合は、Selenium (まだ PHPUnit を使用) を使用して、実際のブラウザーのリモート コントロールでテストすることができます。テストがデータベースからのみ読み取る場合は、ライブ システムを使用できます。ただし、ある時点で書き込みが発生すると想定する方がはるかに賢明であるため、専用のテスト データベースを使用して、Web サイトのテスト バージョンに対してテストします。

機能テストの利点は、高レベルであり、コンポーネント間のすべての相互作用をテストし、エンド ユーザーが使用するシステムをテストすることです。欠点は、テストが失敗したときに、問題があることだけを示しており、どのコンポーネントが原因であるかを正確に示していないことです。そのため、各コンポーネントを個別にテストする単体テストがあります。

私はあなたが望んでいたよりも、これがより多くのテキスト、より少ないコードであることを知っています! しかし、あなたは実際には非常に理論的な質問をしています! このコードのいくつかの単体テストを設定してみて、それらを使用して最初の 1 か月でどのような問題が発生するかを観察するだけで、モックを使用する理由と場所が理解できます。

于 2012-10-28T04:17:47.200 に答える