私は単体テストの初心者であり、引数を持たない関数を持つ PHP クラス内にあるアルゴリズム (実際の実装では cron によって実行可能) をテストするのが困難であり、データ ソースの他のクラスに依存しています。これです:
class Mailing_System_Algo {
function __construct()
{
//Run the mailing system method
$this->execute_mailing_system();
}
function execute_mailing_system()
{
$Class_Data_Source = new Data_Source;
$groups = $Class_Data_Source->get_groups();
//Proceed only if groups are defined
if (!(empty($groups))) {
//rest of the algo codes here-very long and lots of loops and if statements
}
}
}
アルゴ関数をブラックボックスのように扱いたいので、テストを行うときにコードを変更することはありません。しかし、クラスがインスタンス化された瞬間に execute_mailing_system がすぐに実行される場合、入力を入力してテストを開始するにはどうすればよいでしょうか?
アルゴがグループの有無にかかわらず実行されるかどうかを確認したい場合、ユニット テスト コードで $groups の入力を提供するにはどうすればよいですか?
これは私のテストケースがどのように見えるかです:
class WP_Test_Mailing_System_Algo extends WP_UnitTestCase {
/**
* Run a simple test to ensure that the tests are running
*/
function test_tests() {
//no problem here
$this->assertTrue( true );
}
function test_if_algo_wont_run_if_no_groups_provided {
//Instantiate, but won't this algo run the construct function rightaway?
$Mailing_System_Algo = new Mailing_System_Algo;
//rest of the test codes here
//how can I access or do detailed testing of execute_mailing_system() function and test if it won't run if groups are null or empty.
//The function does not have any arguments
}
}
もちろん、私が作成するテストはたくさんありますが、現在、このテストに行き詰まっています。これは、実行する必要がある最初のテストです。しかし、私はこれを始める方法に問題があります。テクニックを正しく習得すれば、残りのテストは簡単になると思います。ご意見やご協力をいただければ幸いです..ありがとうございます。