2009-07-26 2 views

ответ

2

Да, это должно быть возможно, вызвав скрипт оболочки testuite (cake testsuite app all, чтобы просмотреть доступные параметры, посмотрите на вывод справки скрипта) из вашего скрипта Ant.

+0

Знаете ли вы, как сбой сборки ANT, если тест не прошел? – codegy

+0

Я не использую Ant самостоятельно, но вы установили атрибут failonerror? – dhofstet

1

С новым материалом, просто вызывающим cake testsuite app all не будет работать, особенно если вы хотите сделать это из командной строки. Интереты покажут вам миллиард примеров создания сгруппированных наборов, но ничего, что просто запускает все это, как веб-интерфейс, но ждать, я забыл, что обычная практика в php land - это сделать массу лишней работы без уважительной причины. Вы знаете, как печатать в каждом тестовом файле, установленном для ваших тестовых наборов, за строкой.

Исходя из java-фона Мне нравится, как вы можете нажимать кнопку на все кнопки, чтобы я сделал что-то маленькое, чтобы упростить все.

Это решение означает, что вы больше не можете создавать тестовые сеты и ожидать, что они будут работать с испытаниями, собранными в другом месте. Вы никогда не должны делать сюиты. Или просто назовите их по-другому и спрячьте их. Но эй, это нормально, потому что компромисс стоит того.

УБЕДИТЕСЬ Название файла правильно -> AllTestsTest.php

В моих случаях папку я создал набора тестов файл, который использует рекурсивный поиск в каталоге.

<?php 
/** 
* AllTests class 
* 
* This test group will run all tests. 
* 
* @package  Cake.Test.Case 
*/ 
class AllTestsTest extends CakeTestSuite { 

/** 
* Suite define the tests for this suite 
* 
* @return PHPUnit_Framework_TestSuite the instance of PHPUnit_Framework_TestSuite 
*/ 
     public static function suite() { 
       $suite = new CakeTestSuite('All Tests'); 

       $path = dirname(APP_TEST_CASES); 

       $suite->addTestDirectoryRecursive($path); 

       return $suite; 
     } 
} 

Следующий шаг включает в себя изменение торт кода в Lib/Cake/Console/Command/TestShell.php.

@@ -52,9 +52,10 @@ 
     public function addTestDirectoryRecursive($directory = '.') { 
       $Folder = new Folder($directory); 
       $files = $Folder->tree(null, true, 'files'); 
- 
+     
       foreach ($files as $file) { 
-      if (substr($file, -4) === '.php') { 
+       
+      if (substr($file, -8) === 'Test.php' && substr($file, -13) != 'TestsTest.php') { 
           $this->addTestFile($file); 
         } 
       } 

Это взлом, но он решает две проблемы настолько хорошо, что я просто не могу перестать усмехаться.

Вместо того, чтобы записывать любой файл с расширением .php, он фактически придерживается соглашения, используемого веб-интерфейсом. Это позволит вам выполнить один клик AllTests в веб-интерфейсе, а поведение веб-тестировщика будет таким же, как и ваши тесты cli при их запуске.

Стандартизация того, как анализируются агрегированные данные, является поистине запоздалой мыслью для кода, способствующего сообществу торта замечательных людей.

Теперь я знаю, что вы думаете ... «Почему бы не просто расширить CakeTestSuite и переопределить метод?» Удачи с этим. Ваш пробег может отличаться. Торт на самом деле не объектно ориентирован, как Java или другие скомпилированные языки, а метод Cake для продолжения занятий внутри его кишок означает придерживаться конвенций, которые едва ли, если вообще вообще, документируются четко.

внесения этих изменений заставляет конвенцию во всех возможных платформах тестирования с использованием шаблона blahblahtest.php для теста бегуна/погрузчика и так как не существует никакого способа объединить отдельные тестовые наборы вместе без явных строк коды, потому что гений решил, что любой .php-файл был тестом, даже если это действительно набор тестов.

Почему сообщество phpUnit не разработало способ объединения тестовых наборов без необходимости писать что-нибудь? Это базовая функциональность для большинства языков, правильная настройка конфигурации? Структура каталога/пакета диктует состав, поэтому почему бы не воспользоваться чем-то настолько очевидным? У разработчиков Cake было так много шансов сделать это возможным, но я думаю, им нравится печатать в каждом тестовом примере в каждом наборе строк за строкой, как если бы это было забавно.Typey tappy typey typey

Например, Cake core AllTests.php файл, который использует их все в одном.

class AllTests extends PHPUnit_Framework_TestSuite { 

/** 
* Suite define the tests for this suite 
* 
* @return void 
*/ 
    public static function suite() { 
     $suite = new PHPUnit_Framework_TestSuite('All Tests'); 

     $path = CORE_TEST_CASES . DS; 

     $suite->addTestFile($path . 'BasicsTest.php'); 
     $suite->addTestFile($path . 'AllConsoleTest.php'); 
     $suite->addTestFile($path . 'AllBehaviorsTest.php'); 
     $suite->addTestFile($path . 'AllCacheTest.php'); 
     $suite->addTestFile($path . 'AllComponentsTest.php'); 
     $suite->addTestFile($path . 'AllConfigureTest.php'); 
     $suite->addTestFile($path . 'AllCoreTest.php'); 
     $suite->addTestFile($path . 'AllControllerTest.php'); 
     $suite->addTestFile($path . 'AllDatabaseTest.php'); 
     $suite->addTestFile($path . 'AllErrorTest.php'); 
     $suite->addTestFile($path . 'AllEventTest.php'); 
     $suite->addTestFile($path . 'AllHelpersTest.php'); 
     $suite->addTestFile($path . 'AllLogTest.php'); 
     $suite->addTestFile($path . 'Model' . DS . 'ModelTest.php'); 
     $suite->addTestFile($path . 'AllRoutingTest.php'); 
     $suite->addTestFile($path . 'AllNetworkTest.php'); 
     $suite->addTestFile($path . 'AllTestSuiteTest.php'); 
     $suite->addTestFile($path . 'AllUtilityTest.php'); 
     $suite->addTestFile($path . 'AllViewTest.php'); 
     $suite->addTestFile($path . 'AllI18nTest.php'); 
     return $suite; 
    } 
} 

Вонючих вонючий вонючие ...

Они имеют хороший старт с рекурсивным читателем каталога, но согласие на интуитивной конвенции, которая может освободить некоторое ценное время для остальной части планеты полностью из вопрос, который я предполагаю. PHP-программисты ... meh

Выполнение изменений выше достаточно безвредно, и это упростит выполнение ваших тестов без необходимости линейного вызова каждого набора тестов, которые вы должны были писать по строкам. Как люди торта, которые написали свои тесты.

Если вы работаете с jenkins build, это решение так рада, потому что вам нужно всего лишь запустить одну задачу ant вместо нескольких явных наборов. Если вы уже потратили время на создание строк, вы можете попробовать взломать один и тот же файл, как я, но он не соответствовал бы тестировщику браузера.

Это в основном заставляет вашу оболочку придерживаться соглашения Test.php вместо того, что следует за конвенцией взлома, когда я хочу сделать что-то простое, например RUN ALL TESTS. Это похоже на то, что ребята, которые написали тесты для CakePHP, решили, что они никогда не будут писать тесты для приложений cakephp, которые используют фреймворк, используют его с платформой непрерывной интеграции, браузером на основе тестов и автономным кли в windows или nix. Это заговор наверняка.

запустить тесты только сделать это

$ торт тест приложение Alltests < - purty не так. Он интуитивно понятен и работает, и вы не столкнулись с проблемой добавления каждого теста в набор. Теперь ваша цель муравья может быть простой, как пирог.

<target name="phpunit" description="Run All The Cake Tests Like A Boss" depends="ensure-tmp-folders"> 
    <exec executable="bash" failonerror="true" dir="${basedir}/src/app/Console"> 
    <arg value="cake"/> 
    <arg value="-app"/> 
    <arg value="${basedir}/src/app"/> 
    <arg value="test" /> 
    <arg value="app"/> 
    <arg value="AllTests" /> 
    <arg value="--coverage-clover"/> 
    <arg path="${basedir}/build/logs/clover.xml"/> 
    <arg value="--log-junit"/> 
    <arg path="${basedir}/build/logs/junit.xml"/> 
    </exec> 
</target> 

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

Смежные вопросы