Модульное тестирование API-ответов

Мне попался сценарий, в котором я не уверен, как проверить.

Мое приложение обменивается данными с API Zoho CRM, используя официальный PHP SDK. Вот часть моего пользовательского класса, с которой у меня проблемы:

class App_ZCRM_User {

protected $record;


public function __construct( ZCRMRecord $record ) {
$this->record = $record;
}


public function create_default_tasks( array $tasks ) {
$records = [];

foreach( $tasks as $task ) {
$record = ZCRMRecord::getInstance( 'Tasks', null ); // Create empty ZCRMRecord
$record->setFieldValue( 'Subject', $task );
$record->setFieldValue( 'User', $this->record );

$records[] = $record;
}

$tasks  = ZCRMModule::getInstance( 'Tasks' );
$insert = $tasks->createRecords( $records );

// Returns array of EntityResponse objects
return $insert->getEntityResponses();
}
}

Этот класс создается с помощью записи Zoho CRM с использованием уникального идентификатора контактов

// ZCRMRecord object
$record = ZCRMRecord::getInstance( 'Contacts', 'xxxxxxxxxx' );

$user = new App_ZCRM_User( $record );
$user->create_default_tasks( array(
'Choose vehicle make',
'Choose vehicle model',
) );

create_default_tasks() Метод связывается с API Zoho.

Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу, чтобы эти записи вставлялись в CRM при каждом запуске теста.

Я пытался смоделировать ZCRMModule для задач, но класс имеет приватный конструктор и использует статический метод getInstance(), С помощью $tasks = ZCRMModule::getInstance( 'Tasks' ); и звонит $tasks->createRecords() для этого класса будет получен живой запрос API.

Мой тест ниже, но он возвращает сообщение:

Статический метод «getInstance» не может быть вызван для фиктивного объекта

public function test_create_default_tasks() {
$tasks = array(
'Task 1',
'Task 2'
);

$records = [];

foreach( $tasks as $task ) {
$record = ZCRMRecord::getInstance( 'Tasks', null );
$record->setFieldValue( 'Subject', $task );
$record->setFieldValue( 'User', $this->record );

$records[] = $record;
}

$user = new App_ZCRM_User( $this->record );
$user->create_default_tasks( $tasks ); // Does API request


/**
* I want to mock the ZCRMModule tasks and simulate the createRecords() method
*/
$tasks = $this->getMockBuilder( 'ZCRMModule' )
->disableOriginalConstructor() // Constructor is private
->getMock();

$tasks::getInstance( 'Tasks' );
$insert = $tasks->createRecords( $records ); // Method returns null

$created = $insert->getEntityResponses();

// Not sure how to assert the value here...
//$this->assertEquals(  );
}

Я теряюсь, пытаясь обдумать это … как я могу протестировать этот метод, не используя живой запрос API к Zoho?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]