PHPUnit2 vs SimpleTest

atv

Новичок
PHPUnit2 vs SimpleTest

Попробовал разобраться сам, но на поверхности ответа не нашёл. Может кто подскажет есть ли между ними принципиальные различия.
 

svetasmirnova

маленький монстрик
Модульное тестирование в этих пакетах практически одинаковое с точки зрения пользователя. Но на этом их сходство завершается.
 

svetasmirnova

маленький монстрик
Гравицапа
Мне нужно тестировать пользовательские интерфейсы. Прошлой весной PHPUnit2 этого не умел. Поэтому SimpleTest forever =)
 

Frol

Новичок
phpunit2 намного удобней при использование php5.
более логичная обработка asserts.
он не пойдет дальше загаживать вывод проваленными сравнениями, если одно из них провалилось.
обрабатывает исключения.
 

syfisher

TDD infected!!
Frol
А phpUnit2 поддерживает автоматическую генерацию мок-объектов?
И еще можно ли вывести полный backtrace для assert-а?

В SimpleTest весьма неудобно бывает выносить assert-ы в отдельный метод, который вызывается из основного тестового метода, так как потом не понятно, какой именно тестовый метод слетел. Приходится немного извращаться:

PHP:
  function _checkDbRecordsAmount($cocktails, $slides, $images, $line)
  {
    $result = $this->db->select('cocktail');
    $this->assertEqual($result->getTotalRowCount(), $cocktails, '%s' . $line);

    $result = $this->db->select('cocktail_slide');
    $this->assertEqual($result->getTotalRowCount(), $slides, '%s' . $line);

    $result = $this->db->select('image_object');
    $this->assertEqual($result->getTotalRowCount(), $images, '%s' . $line);
  } 

  function testCocktailSlides()
  {
    [...]
    $this->_checkDbRecordsAmount(1, 2, 2, __LINE__);
 }
Маркус обещает это поправить в будущих версиях, но это не скоро произойдет, скорее всего.

И как насчет расширений phpUnit-а? Для SimpleTest-а очень легко создавать свои runners, finders и т.д.
 

pachanga

Новичок
Мне очень нравится подход, с которым написан SimpleTest, в отличине от PHPUnit, где авторы пытаются сделать клон JUnit один в один, и из-за этого код выглядит довольно громоздко, SimpleTest внутри намного изящнее и...проще ;)

Я лично за SimpleTest еще и потому, что за этим стоит Marcus Baker. Из него просто бьет фонтан очень инновационных и полезных идей, и это один из тех людей, кто в самом деле продвигает PHP на уровень enterprise. Я думаю, не за горами книга от Marcus'а...

Кстати, в личной беседе с Marcus'ом он рассказал о возможном будущем моков:

Код:
//Using the overload capability and proper references, 
//I think I can get mocks written as...

interface Thing {
      function add;
}

class MyTest extends UnitTestCase {
      function testStuff() {
          $this->MockThing->add->gives(29);
          $thing = new MockThing();
          ...
      }
}

$this->MockThing->instance(2)->add->at(3)->gives(12);

//Or, if you only want to return 29 on the correct parameters...

$this->MockThing->add(14, 15)->gives(29);

//If you want to enforce this...

$this->MockThing->add->expects(14, 15)->gives(29);

//The partials are still fiddly...

$this->PartialThing('Thing', array('method))->method->gives(3);
-~{}~ 30.01.06 11:58:

В SimpleTest весьма неудобно бывает выносить assert-ы в отдельный метод, который вызывается из основного тестового метода, так как потом не понятно, какой именно тестовый метод слетел.
По-моему в CVS версии это было исправлено, нет?
 

Frol

Новичок
А phpUnit2 поддерживает автоматическую генерацию мок-объектов?
да.
причем с удобным fluent interface.
И еще можно ли вывести полный backtrace для assert-а?
не могу сказать, так как не трогал его и сам PHP очень давно.
но думаю, что есть, так как это клон JUnit и соответственно основан на исключениях.
 

atv

Новичок
Я и сам решил заглянуть в код. Честно говоря SimpleTest смотрится значительно лучше. А красивому коду я доверяю больше, даже за счёт меньшей функциональности, если такая имеется. Так что мой выбор пал на SimpleTest.
 

[sid]

Новичок
phpunit2 намного удобней при использование php5.
более логичная обработка asserts.
он не пойдет дальше загаживать вывод проваленными сравнениями, если одно из них провалилось.
обрабатывает исключения.
Я не уверен, что это плюс. Одна из основных идей модульного тестирования ссостоит в том, что testCaseы должны быть изолированны друг друга. Это значит, что если первый case дал провал, то это никак не должно повлиять на остальные.
 

ForJest

- свежая кровь
[sid]
В Simpletest тестовым прецендентом считается один assert, а в UnitTest - целый метод, со множеством asset. Поэтому в UnitTest если слетел один asset, то слетает весь метод и не "загаживается" следующими ассетами. Об этом я так понимаю и говорит Frol?
 
Сверху