[解決済み] 抽象クラスのテスト
2022-04-28 08:48:53
質問
抽象クラスの具象メソッドを PHPUnit でテストするにはどうしたらいいのでしょう?
テストの一部として、ある種のオブジェクトを作成する必要があると思います。しかし、そのベストプラクティスやPHPUnitがそれを可能にしているかどうかはわかりません。
どのように解決するのですか?
抽象クラスは具象メソッドを持つことができ、この具象メソッドをテストすることができますので、抽象クラスのユニットテストは必ずしもインターフェイスをテストすることを意味しません。
ライブラリのコードを書くとき、アプリケーション層で拡張することを想定したベースクラスがあることは、それほど珍しいことではありません。そして、そのライブラリのコードを確実にテストしたいのであれば、抽象クラスの具象メソッドをUTする手段が必要です。
個人的にはPHPUnitを使っていますが、スタブやモックオブジェクトと呼ばれるものがあり、この種のテストを手助けしてくれます。
そのまま PHPUnitマニュアル :
abstract class AbstractClass
{
public function concreteMethod()
{
return $this->abstractMethod();
}
public abstract function abstractMethod();
}
class AbstractClassTest extends PHPUnit_Framework_TestCase
{
public function testConcreteMethod()
{
$stub = $this->getMockForAbstractClass('AbstractClass');
$stub->expects($this->any())
->method('abstractMethod')
->will($this->returnValue(TRUE));
$this->assertTrue($stub->concreteMethod());
}
}
モックオブジェクトは、いくつかのことを与えてくれます。
- 抽象クラスの具体的な実装を持つ必要がなく、スタブで代用することができます。
- 具象メソッドを呼び出し、それが正しく動作することを保証することができます。
- 具象メソッドが未実装の (抽象) メソッドに依存している場合は、will() PHPUnit メソッドで戻り値をスタブ化することができます。
関連
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] いつ使うか。Java 8+のインターフェイスのデフォルトメソッドと、抽象的なメソッドの比較
-
[解決済み] Objective-Cで抽象クラスを作成する
-
[解決済み] 抽象クラスをユニットテストする方法:スタブで拡張する?
-
[解決済み】Mockitoを使用して抽象クラスをテストする
-
[解決済み] テスト駆動開発のデメリット?[クローズド]
-
[解決済み] 例:無効なutf8文字列?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javaプロジェクト。ApplicationContextのロードに失敗しました
-
[解決済み] モッキングとは?
-
[解決済み] 抽象クラスをユニットテストする方法:スタブで拡張する?
-
[解決済み] ユニットテストとインテグレーションテストの違いは何ですか?[重複あり]
-
[解決済み】ユニットテストと機能テストの違いは何ですか?
-
[解決済み】ユニットテスト初心者、優れたテストを書くには?[クローズド]
-
[解決済み] クロームの拡張機能をテストするには?
-
[解決済み] ファイルシステムに依存するコードの単体テスト
-
[解決済み] Junit: 統合テストと単体テストの分割
-
[解決済み] TDDとBDDの主な違いは何ですか?[クローズド]