[wp-trac] [WordPress Trac] #26725: Wordpress-tests' WP_PHPUnit_Text_UI Throws Unhandled Exceptions

WordPress Trac noreply at wordpress.org
Fri Dec 27 01:24:16 UTC 2013


#26725: Wordpress-tests' WP_PHPUnit_Text_UI Throws Unhandled Exceptions
--------------------------+-----------------------------
 Reporter:  wawco         |      Owner:
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  Unit Tests    |    Version:  trunk
 Severity:  normal        |   Keywords:
--------------------------+-----------------------------
 '''Summary'''
 In Wordpress-test's boostrap.php, the WP_PHPUnit_TextUI_Command class
 extends the PHPUnit test runner class simply to parse command line
 arguments and find some specific ones.  PHPUnit's test runner is not
 actually be used for any other reason.

 If it encounters command line arguments that PHPUnit doesn't recognize, an
 unhandled exception occurs.  This is problematic for a couple reasons (see
 problem details), but the most important one is that enforcing the correct
 PHPUnit command line arguments is out of the scope of this particular
 code.  If there is a problem, it might be better if it were handled by
 PHPUnit and not this Wordpress class that we're just using to find
 specific arguments.

 '''Problem Details'''

 Currently the WP_PHPUnit_TextUI_Command constructor contains a code
 snippet cribbed directly from the
 PHPUnit_Text_UI_Command::handleArguments() method.

 {{{
             $this->options = PHPUnit_Util_Getopt::getopt(
               $argv,
               'd:c:hv',
               array_keys($this->longOptions)
             );
 }}}

 This works fine when you run PHPUnit directly (and correctly).  If you try
 to use one of a handful of different integration or continuous testing
 tools, PHPUnit is not being run directly from the command line and so
 unhandled exceptions will occur until boostrap.php is modified by hand.

 '''Specific use case'''
 Trying to use the MakeGood plugin for Eclipse as a tool for continuous
 testing will cause unhandled exceptions and prevent testing from
 happening. Here's what MakeGood does...
 {{{
 [PATH_TO_ECLIPSE]\plugins\com.piece_framework.makegood.stagehandtestrunner_2.5.0.v201311031709\resources\php\bin\testrunner.php
 --no-ansi phpunit --log-
 junit=[PATH_TO_TEMP_DIR]\com.piece_framework.makegood.launch\MakeGood1388104275775.xml
 --log-junit-realtime --phpunit-config=[PATH_TO_phpunit.xml] -R --test-
 file-pattern=Test(?:Case)?\.php$ [TEST_PATH]
 }}}

 PHPUnit won't recognize --no-ansi (if not a few other things) and an
 exception is thrown.

 '''Proposed Solution'''
 Loop through ARGV directly and call longOption on each one, catching the
 exceptions thrown by any errors but not acting on them.  Dealing with bad
 command line parameters is something that is either handled earlier or
 later, by PHPUnit.

 Also, instead of extending the PHPUnit runner class, just go directly to
 the source and extend PHPUnit_Util_Getopt.

--
Ticket URL: <http://core.trac.wordpress.org/ticket/26725>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software


More information about the wp-trac mailing list