Я тоже использую тост, и в основном я использую его для тестирования методов модели. Чтобы сделать это, сначала усечь все значения таблицы, вставить предопределенное значение, а затем получить его. Это пример тестирования я использовал в моем приложении:
class Jobads_tests extends Toast
{
function Jobads_tests()
{
parent::Toast(__FILE__);
// Load any models, libraries etc. you need here
$this->load->model('jobads_draft_model');
$this->load->model('jobads_model');
}
/**
* OPTIONAL; Anything in this function will be run before each test
* Good for doing cleanup: resetting sessions, renewing objects, etc.
*/
function _pre()
{
$this->adodb->Execute("TRUNCATE TABLE `jobads_draft`");
}
/**
* OPTIONAL; Anything in this function will be run after each test
* I use it for setting $this->message = $this->My_model->getError();
*/
function _post()
{
$this->message = $this->jobads_draft_model->display_errors(' ', '<br/>');
$this->message .= $this->jobads_model->display_errors(' ', '<br/>');
}
/* TESTS BELOW */
function test_insert_to_draft()
{
//default data
$user_id = 1;
//test insert
$data = array(
'user_id' => $user_id,
'country' => 'ID',
'contract_start_date' => strtotime("+1 day"),
'contract_end_date' => strtotime("+1 week"),
'last_update' => time()
);
$jobads_draft_id = $this->jobads_draft_model->insert_data($data);
$this->_assert_equals($jobads_draft_id, 1);
//test update
$data = array(
'jobs_detail' => 'jobs_detail',
'last_update' => time()
);
$update_result = $this->jobads_draft_model->update_data($jobads_draft_id, $data);
$this->_assert_true($update_result);
//test insert_from_draft
$payment_data = array(
'activation_date' => date('Y-m-d', strtotime("+1 day")),
'duration_amount' => '3',
'duration_unit' => 'weeks',
'payment_status' => 'paid',
'total_charge' => 123.45
);
$insert_result = $this->jobads_model->insert_from_draft($jobads_draft_id, $payment_data);
$this->_assert_true($insert_result);
//draft now must be empty
$this->_assert_false($this->jobads_draft_model->get_current_jobads_draft($user_id));
}
}
Я использую ADOdb в моем приложении, но не получает путать с этим. Вы можете сделать $this->db
внутри тестового контроллера после загрузки библиотеки базы данных. Вы можете поместить его в автозагрузку, чтобы он автоматически загружался.
Посмотрите, что в моем коде перед запуском теста таблица усечена. После запуска я получу любую ошибку, которая может произойти. Я утверждаю для предопределенной вставки и обновления. Используя Toast для тестирования модели, вы убедитесь, что метод модели выполняет именно ту задачу, которую вы хотите сделать. Сделайте тест, который вам нужен, и убедитесь, что вы покрываете все возможности ввода и вывода значений.
Прохладный, но мне интересно, почему вы размещаете все те тесты в рамках одной тестовой функции? Почему бы не поместить их в отдельные функции - я полагаю, что облегчить bugtrack, если утверждение assert терпит неудачу? –
В моем тесте выше, это отражает реальный случай в моем приложении. Вот почему в одном тесте есть 2 «действия». Даже если вы это сделаете, если один из них не удастся, тогда он будет отображаться, что не срабатывает, первое или второе действие. Вы можете сделать все, что захотите, в соответствии с вашими потребностями. –