问题描述
我想在PHPUnit中测试我的CSV导入方法。 我的PHPUnit测试控制器,我想测试导入的CSV文件并将数据插入数据库。 在TestDataCSV.PHP中,我创建了必需的CSV文件和数组。
<?PHP
namespace Tests\Unit;
use Tests\TestCase;
use \Mockery;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
include "TestDataCSV.PHP";
class scheduleCSVImportTest extends TestCase
{
//use RefreshDatabase,WithFaker;
/**
* Allocation unit test
*
* @dataProvider csvImportDataProvider
*/
public function testconvert($scheduleCSVData,$scheduleTEXTData,$getColumnListingData,$expectedResultArr)
{
$mockMasterData = Mockery::mock('App\Http\Controllers\CsvController')->makePartial();
Schema::shouldReceive('getColumnListing')
->with('t_schedule')
->andReturn($getColumnListingData);
$actualResult = $mockMasterData->convert($scheduleCSVData,'schedule');
$this->assertEquals($expectedResultArr,$actualResult);
}
public function csvImportDataProvider()
{
return data();
}
}
我的csvController代码是:
public function convert($fp,$targetFile,$target_table)
{
...........
.........
if ($target_table=='schedule') {
$column_names = Schema::getColumnListing('t_schedule');
}
...........
return [
'message' => $message.
"対象テーブル:[ $target_table_name ]<br>".
"登録件数:[ $insert_count ]<br>".
"更新件数:[ $update_count ]<br>",'target_table' => $target_table,];
}
解决方法
您可以尝试使用Aliasing模拟静态方法:
别名模拟使用给stdClass的给定类名创建类别名 并且通常用于启用公共静态方法的模拟。 。在新的模拟对象上设置的期望涉及静态 方法将用于对该类的所有静态调用。
$mock = \Mockery::mock('alias:MyClass');