問題タブ [phpunit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - テストの実行時にZend_Db_Table_Abstractfetchrowがガベージデータを返すのを防ぐにはどうすればよいですか?
私はZendにかなり慣れておらず、単体テストの作成にいくつかの問題があります。私はそれを最小限のテストクラスに分解しましたが、それでも問題を再現します。
保護された$db;
public function __construct($ name = NULL){parent :: __construct($ name);
$ this-> db = Zend_Db :: factory('Pdo_Mysql'、array('host' => '127.0.0.1'、'username' =>'root'、'password' =>'xxxxxxxx'、'dbname' = >'testingdb'));
Zend_Db_Table_Abstract :: setDefaultAdapter($ this-> db); }
public function testName(){$ users = new Users(); $ select = $ users-> select()-> where('regCode =?'、'deadbeef'); $ row = $ users-> fetchRow($ select); }
つまり、これは簡略化されたテストです。内部にデータを含むデータベースを設定しています(正しく接続されています)。regCodeが'deadbeef'に設定されたレコードがあり、email、regDate、およびアフィリエイトのフィールドもあります。
私はUsers.phpと呼ばれるクラスを持っています。それはそれが得るのと同じくらい簡単です:
私の問題は、データベースにうまく挿入できることですが、クエリは奇妙な結果を返します。上記のfetchRowは正しいSQLを生成しますが、返される行はガベージです。regCode、email、regDate列をまったく含まない行が返され、アフィリエイトは存在しますが、列は「アフィリエイト」ではなく「users」と呼ばれます。
私は他のテーブルでそれを試しましたが、何も機能しません-データベース名を列ヘッダーとして返し、テーブル名を列として返すものさえあります。
注意すべきことの1つは、これをテストで実行していない場合は正常に機能することです。適切なアプリのまったく同じコードとdbはうまく機能しますが、phpUnitテストとして実行すると、すべてが厄介になります:-(
アドバイスをいただければ幸いです
乾杯、ブリン
php - PHPUnit、「次のように動作する...」のテスト
クラス「クラスA」を検証する一連のPHPUnitテストがあります。
クラスAを拡張する別のクラス「クラスB」があります。
テスト コードを複製せずに、「クラス B がクラス A のテストに合格する」、つまり「クラス B がクラス A のように動作する」ことをテストする良い方法はありますか?
拡張を (instanceof を使用して) テストすることはできますが、それは誤解を招くようなテストのようです。
クラスAを拡張するのではなく、クラスAのように動作することを気にしますよね?または間違っていますか?
php - PHPUnit でパスの問題に対処する
PHPUnit を使い始めたばかりですが、ちょっとした障害に遭遇しました。
私のコードは $_SERVER['DOCUMENT_ROOT'] を使用してインクルードのパスを計算します。これは、Apache サーバーが PHP を実行している場合に機能しますが、「phpunit Tests」を使用してコマンドラインから phpunit を実行すると DOCUMENT_ROOT が設定されないため、これらのインクルード働かないでください。
PHPUnit の構成に何か不足していますか? どういうわけかApacheと統合する必要がありますか?
php - PHPUnit selense HTML ファイルの実行時に rc サーバーでセッションを 1 つだけ作成する方法
私の Web サイトにはログイン ページがあるため、最初にログインして各 HTML selense テスト ファイルを実行する必要があります。PHPUnit フレームワークの動作方法は、各テストを個別に実行することによって独立したテスト ケースを作成することです。つまり、Setup()
各テスト ケースで関数を呼び出します --> 次に Selenium RC サーバーを呼び出します --> 次にセッション ID を作成します。私のコードは以下です。
sql - テストデータベースにログを記録するようにPHPUnitを構成するにはどうすればよいですか?
このwikiページで説明されている「テストデータベース」を使用するようにPHPUnitを構成する方法を見つけようとしています:http ://www.phpunit.de/wiki/TestDatabaseただし、有効にする方法に関するドキュメントが見つかりません構成します。
誰かアイデアはありますか?
ありがとう
phpunit - 保護されたメソッドが呼び出されたかどうかのテスト
保護されたメソッドがパブリック インターフェイスで呼び出されるかどうかをテストしようとしています。
私はそれが正しく呼び出されていることを知っていますが、PHPUnitは決して呼び出されないと言います.
メソッドが呼び出されない場合、他の方法でテストすると同じことが起こります。
メソッドは呼び出されますが、PHPUnit はそうではないと言っています。
私が間違っていることは何ですか?
編集 私は自分のメソッドを二重コロンで宣言していませんでした。これは、それがパブリック メソッド (インターフェイス) であることを示すためだけでした。完全なクラス/メソッド宣言に更新されました。
編集 2 抽象クラスでいくつかのメソッドの実装をテストしていると言うべきでした (これを反映するようにコードを編集しました)。クラスをインスタンス化できないので、どうすればこれをテストできますか?
SomeClassSimple
代わりに、これを拡張SomeClassAbstract
してテストすることを考えています。それは正しいアプローチですか?
php - WindowsとLinuxの両方で単体テストを実行する
LinuxとWindowsの両方でユニットテスト( phpunit )を効果的に実行できるようにする方法、方法はありますか?
システムの一部はLinuxでしか利用できないため、これを行う必要がありますが、IDEでテストスイートの特定の部分を実行できるようにしたいのですが、これはNetBeansです。
私が遭遇する問題は、ほとんどの場合、パスに関係しています。さらに複雑にするために、私はphing内からテストを実行するつもりです。
しかし、私がまだ取り組んでいないのは、さまざまなプラットフォームに合わせてさまざまなテストスイートを調整できることです。これも可能ですか?
テストは基本的にテストディレクトリ内にあり、ソースはsrc内にあります。インクルードパスは、インクルードファイルによって処理されます。オートローダーを使用して異なるディレクトリ構造を処理することは可能でしょうか?
php - PHPUnitモックオブジェクトで複数のメソッドを設定する
PHPとPHPUnitでモックオブジェクトを作成しようとしています。これまでのところ、私はこれを持っています:
ひどく曖昧なオブジェクト名を少しの間無視すると、私が行ったことは次のとおりであることがわかります-構成
する2つのメソッドを使用してモックオブジェクトを作成しました
-空白の配列を返すように'get_events'メソッドを構成しました
-モックをにドロップしましたコンストラクター。
私が今やりたいのは2番目の方法を構成することですが、それを行う方法を説明するものが見つかりません。こんなことしたい
またはそのようなものですが、それは機能しません。どうすればいいですか?
正直なところ、これは、テストするために複数のメソッドを構成する必要がある場合、コードの構造が不十分であることを示していますか?
php - オブジェクトを作成するメソッドの単体テスト
単体テストについて頭を悩ませようとしていますが、見つけなければならないジグソーパズルがもう 1 つあります。
私がやろうとしているのは、次のコードのテストを書くことです。この場合、非常に単純なフロント コントローラー (PHP で記述) を用意しました。
私が抱えている問題は、コードが新しいオブジェクトを作成するためです。テスト ケース内で実際に何を行うかを厳密に制御できるように、リクエスト オブジェクトを簡単にモックできます。実際にコントローラーをテストダブルに置き換える最善の方法がわかりません。
IBM のこの記事では、コントローラーを作成するためのファクトリー メソッドを用意し、テストに使用する特定のクラスでこれをオーバーライドすることを提案しています。
そして、おそらく次のようなテストのために:
(これは記事が言っていることとはまったく異なりますが、これができれば私にとって最も役立つと思います)
別の解決策は、コントローラーを作成する別のクラスを持つことです。これは、frontController の依存クラスになります。このようにして、テスト中に factory/creation クラスを test double に置き換えることができます。このようなもの:
依存性注入は、実際の「ルート」メソッドへのパラメーターではなく、フロントコントローラーコンストラクターまたはセッターを介して処理できると思います。
私はオプション2を好むと思います。
これらの 2 つの方法のどちらかが、この種のものをテストするための正しい方法ですか?
(おそらく、ここでは「良い方法」の方が適切です!)
オプション 1 とオプション 2 についての考えや提案、または実際に代替案を歓迎します。覚えておいてください-重要なことは、実行の一部として他のオブジェクトを作成するオブジェクトをテストする方法です。
ありがとう!
php - PHPUnit で静的クラスをテストする
テストしようとしている一連のクラスがあります。クラス A はクラス X に依存します。クラス X には、ランダムなことやデータベースを使用することを行う関数が含まれています。依存関係なしでクラス A をテストするために、必要なものを正確に返すクラス X のモック バージョンを作成しました。
それで、私の質問は、同じ名前とファイル名を持つモックバージョンを既に含めているので、クラス X をどのようにテストするのかということです。「クラス X を再宣言できません」というエラーが表示されます。
スタブ化されたオブジェクトをテスト対象のクラスに渡す方法がないため、スタブを使用できないと思います。テスト対象のクラス (Class A) は、静的クラスのインスタンスを要求します (ClassA::getInstance();)。
クラスXのモックバージョンを含むファイルをアンインクルードできないため、これはテストスイートまたはテストケースと関係がありますか.
よろしくお願いいたします。
マイク