前提
別クラスを継承したクラスのメソッドのテストできない。
現在php unitでテストを行っています。
Bクラス継承したAクラス
1use B; 2 3class A extends B { 4 省略... 5 private function getTotal( 6 //Bクラスのメソッド使用↓ 7 this->line("計算開始"); 8 ); 9 ... 省略 10}
Aクラスのtest
1use A; 2use Tests\TestCase; 3 4class aTest extends TestCase{ 5 省略... 6 public function AクラスのgetTotalが通るかのテスト() : void{ 7 //ReflectionClassをテスト対象のクラスをもとに作る. 8 $reflection = new \ReflectionClass(A); 9 // メソッドを取得する. 10 $method = $reflection->getMethod('getTotal'); 11 // アクセス許可をする. 12 $method->setAccessible(true); 13 14 $from = 20. 15 $to = 30. 16 17 $this->assertEquals($method->invokeArgs(A, [$from, $to]), '50.0000'); 18 } 19 ... 省略 20} 21
処理は簡略化しております。
実現したいこと
Bを親クラスとして継承したAクラスのgetTotalというメソッドをテストしたい。
発生している問題・エラーメッセージ
AクラスのgetTotalというメソッドを実行する際に、Bクラスのthis->line()のメソッドを呼び出している。
しかし実行に失敗をし下記のエラーが発生してしまう。
エラー文
Error: Call to a member function writeln() on null
PHP,Laravel
試したこと
・Bクラスのインスタンスが作れていないため、テスト用にインスタンスをつくれれば良いのではと思った。
→ReflectionClassをテスト対象のクラスをもとに作る際に、クラスBを継承できるような書き方があるのか探していた。具体的な書き方を調べていたがわからなかった。そもそもReflectionClassではできないのではという答えに辿り着いた。
・スタブクラスでAクラスBクラスを含めたテスト用のクラスを作成しようとしたが、具体的にどのような処理にすれば良いかわからなかった。
解決策等ありましたら、どんな小さなことでもご教授いただけたら幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
PHP 7.4.25
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/22 23:32