簡體   English   中英

如何對數據提取方法進行單元測試

[英]How to unit test a data extraction method

我創建了一種與框架交互的方法,提取狀態為已完成的訂單商品。

但是,如何對我的方法進行單元測試以確保其正確運行...

class A
{
    public function extractData()
    {
        // extract data from framework
        $dataCollection = FrameworkX->getDataCollection('sales/orders');
        $dataCollection->filter('state', 'complete');

        return $extractedData;
    }
}


ClassATest
{
    public function test_extracted_data_contains_only_items_with_complete_status {
        $sut  = new ClassA();
        $sut->extractData();

        // What is the assertion here?
    }

}

您可以遍歷集合並斷言每個項目都處於“已完成”狀態。

但是,您在這里所做的稱為集成測試

您不是要測試方法(單元),而是要測試框架的行為(從存儲中獲取數據)以及過濾器方法的工作方式。

如果您想進行單元測試,請參閱本文 您應該為FramewokX->getDataCollection()方法創建一個Stub。

如何使用第三方依賴項測試方法

如果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中創建一個構造函數

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
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM