您可以通過收集迭代,並斷言,每一個項目是在「完成」狀態。
但是你在這裏做什麼叫做integration test。
你沒有測試你的方法(單元),但你測試框架的行爲(從存儲獲取數據)以及過濾方法的工作方式。
如果你想有一個單元測試看看這個article。您應該爲您的FramewokX->getDataCollection()
方法創建存根。
如何測試與第三方的依賴
如果FrameworkX是最終的,那麼你可以聲明接口中的方法:
interface iDataSource
{
public function getDataCollection($path);
}
和一個新的類:
class DataSource implements iDataSource
{
public function getDataCollection($path)
{
//no need to test this method, it's just a wrapper
return FrameworkX->getDataCollection('sales/orders');
}
}
在你的A級創建a constructor:
public function __construct(iDataSource $dataSource)
{
$this->dataSource= $dataSource;
}
並更改extractData
方法以使用它。
public function extractData()
{
// extract data from framework
$dataCollection = $dataSource->getDataCollection('sales/orders');
$dataCollection->filter('state', 'complete');
return $extractedData;
}
讓我們假設您正在使用PHPUnit。
public function test_extracted_data_contains_only_items_with_complete_status()
{
// Create a stub for the DataSource class.
$stub = $this->getMockBuilder('DataSource')
->getMock();
// Configure the stub.
$stub->method('getDataCollection')
->willReturn(preconfigured_collection_with_all_statuses_here);
$sut = new ClassA($stub); //create a new constructor and pass the stub
$sut->extractData();
// and after that verify that your method filtered out non complete statuses
}
這不是單元測試,而是集成測試。 –