sebastianbergmann / phpunit

The PHP Unit Testing framework.
https://phpunit.de/
BSD 3-Clause "New" or "Revised" License
19.7k stars 2.2k forks source link

Cannot Load Autoload.php #1291

Closed alexandermontgomery closed 10 years ago

alexandermontgomery commented 10 years ago

I am using the .phar version of 3.7.19. The phar is working fine from the CLI. The issue comes when I try to run tests programmatically from PHP. I continuously get this error:

require_once(phar:///usr/share/php/phpunit.phar/PHPUnit/Autoload.php): failed to open stream: phar error: "PHPUnit/Autoload.php" is not a file in phar "/usr/share/php/phpunit.phar"

When I just require the phpunit.phar, I see my PHP script output what you would get using PHPUnit from the CLI and then stop execution.

I don't seem to be the only person having this problem: http://stackoverflow.com/questions/18554981/phpunit-phar-and-no-such-file-or-directory.

I see the Autoloader in version 3.7 in the repo (https://github.com/sebastianbergmann/phpunit/blob/3.7/PHPUnit/Autoload.php) but I do not have much insight into how the phar is being built and why Autoload.php is not being included.

I wrote a quick PHP script to iterate all of the files within the phar in the PHPUnit directory and sure enough Autoload.php is nowhere to be found.

Script:

    $p = new Phar('phar:///usr/share/php/phpunit.phar/PHPUnit', 0);
    // Phar extends SPL's DirectoryIterator class
    foreach (new RecursiveIteratorIterator($p) as $file) {
        // $file is a PharFileInfo class, and inherits from SplFileInfo
        echo $file->getPathName() . "\n";
    }

Output:

phar:///usr/share/php/phpunit.phar/PHPUnit/Extensions/GroupTestSuite.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Extensions/PhptTestCase/Logger.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Extensions/PhptTestCase.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Extensions/PhptTestSuite.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Extensions/RepeatedTest.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Extensions/TestDecorator.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Extensions/TicketListener.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Assert/Functions.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Assert/Functions.php.in
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Assert.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/AssertionFailedError.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/Array.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/DOMDocument.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/Double.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/Exception.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/MockObject.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/Numeric.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/Object.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/Resource.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/Scalar.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/SplObjectStorage.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator/Type.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Comparator.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/ComparatorFactory.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/ComparisonFailure.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/And.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/ArrayHasKey.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/Attribute.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/Callback.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/ClassHasAttribute.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/ClassHasStaticAttribute.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/Composite.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/Count.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/Exception.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/ExceptionCode.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/ExceptionMessage.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/FileExists.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/GreaterThan.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsAnything.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsEmpty.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsEqual.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsFalse.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsIdentical.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsInstanceOf.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsNull.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsTrue.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/IsType.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/JsonMatches/ErrorMessageProvider.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/JsonMatches.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/LessThan.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/Not.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/ObjectHasAttribute.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/Or.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/PCREMatch.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/SameSize.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/StringContains.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/StringEndsWith.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/StringMatches.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/StringStartsWith.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/TraversableContains.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/TraversableContainsOnly.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint/Xor.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Constraint.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Error/Deprecated.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Error/Notice.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Error/Warning.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Error.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Exception.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/ExpectationFailedException.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/IncompleteTest.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/IncompleteTestError.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/OutputError.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Process/TestCaseMethod.tpl.dist
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/SelfDescribing.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/SkippedTest.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/SkippedTestError.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/SkippedTestSuiteError.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/SyntheticError.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Test.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/TestCase.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/TestFailure.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/TestListener.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/TestResult.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/TestSuite/DataProvider.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/TestSuite.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Framework/Warning.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Runner/BaseTestRunner.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Runner/StandardTestSuiteLoader.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Runner/TestSuiteLoader.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Runner/Version.php
phar:///usr/share/php/phpunit.phar/PHPUnit/TextUI/Command.php
phar:///usr/share/php/phpunit.phar/PHPUnit/TextUI/ResultPrinter.php
phar:///usr/share/php/phpunit.phar/PHPUnit/TextUI/TestRunner.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Class.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Configuration.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/DeprecatedFeature/Logger.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/DeprecatedFeature.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Diff.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/ErrorHandler.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Fileloader.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Filesystem.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Filter.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Getopt.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/GlobalState.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/InvalidArgumentHelper.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Log/JSON.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Log/JUnit.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Log/TAP.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/PHP/Default.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/PHP/Windows.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/PHP.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Printer.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/String.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Test.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/TestDox/NamePrettifier.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/TestDox/ResultPrinter/HTML.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/TestDox/ResultPrinter/Text.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/TestDox/ResultPrinter.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/TestSuiteIterator.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/Type.php
phar:///usr/share/php/phpunit.phar/PHPUnit/Util/XML.php

Any help would be much appreciated. If the 3.7 phar cannot work with calling it like this then maybe I will try composer. This would be worth noting in the documentation though.

Thanks!

whatthejeff commented 10 years ago

Make sure your test files don't include the following line:

require_once 'PHPUnit/Autoload.php';

This is only required for older PEAR-based installs.

alexandermontgomery commented 10 years ago

None of my files include that.

They used to include that and when I migrated off the old PEAR install to the PHAR I changed the line from

[old]

require_once 'PHPUnit/Autoload.php';

to [new]

require_once 'phar://phpunit.phar';

When my PHP file called updates.php hits the phar include, the script is stopped and this is outputted

PHPUnit 3.7.19 by Sebastian Bergmann.

Usage: phpunit [switches] UnitTest [UnitTest.php]
       phpunit [switches] <directory>

  --log-junit <file>        Log test execution in JUnit XML format to file.
  --log-tap <file>          Log test execution in TAP format to file.
  --log-json <file>         Log test execution in JSON format.

  --coverage-clover <file>  Generate code coverage report in Clover XML format.
  --coverage-html <dir>     Generate code coverage report in HTML format.
  --coverage-php <file>     Serialize PHP_CodeCoverage object to file.
  --coverage-text=<file>    Generate code coverage report in text format.
                            Default to writing to the standard output.

  --testdox-html <file>     Write agile documentation in HTML format to file.
  --testdox-text <file>     Write agile documentation in Text format to file.

  --filter <pattern>        Filter which tests to run.
  --testsuite <pattern>     Filter which testsuite to run.
  --group ...               Only runs tests from the specified group(s).
  --exclude-group ...       Exclude tests from the specified group(s).
  --list-groups             List available test groups.
  --test-suffix ...         Only search for test in files with specified
                            suffix(es). Default: Test.php,.phpt

  --loader <loader>         TestSuiteLoader implementation to use.
  --printer <printer>       TestSuiteListener implementation to use.
  --repeat <times>          Runs the test(s) repeatedly.

  --tap                     Report test execution progress in TAP format.
  --testdox                 Report test execution progress in TestDox format.

  --colors                  Use colors in output.
  --stderr                  Write to STDERR instead of STDOUT.
  --stop-on-error           Stop execution upon first error.
  --stop-on-failure         Stop execution upon first error or failure.
  --stop-on-skipped         Stop execution upon first skipped test.
  --stop-on-incomplete      Stop execution upon first incomplete test.
  --strict                  Run tests in strict mode.
  -v|--verbose              Output more verbose information.
  --debug                   Display debugging information during test execution.

  --process-isolation       Run each test in a separate PHP process.
  --no-globals-backup       Do not backup and restore $GLOBALS for each test.
  --static-backup           Backup and restore static attributes for each test.

  --bootstrap <file>        A "bootstrap" PHP file that is run before the tests.
  -c|--configuration <file> Read configuration from XML file.
  --no-configuration        Ignore default configuration file (phpunit.xml).
  --include-path <path(s)>  Prepend PHP's include_path with given path(s).
  -d key[=value]            Sets a php.ini value.

  -h|--help                 Prints this usage information.
  --version                 Prints the version and exits.
whatthejeff commented 10 years ago

Oh, I think I misunderstood your original issue. Including the phar as a library is only supported by PHPUnit 4.2+ (see: f220079).

alexandermontgomery commented 10 years ago

Ahh - thanks. So either I could unpackage the 3.7 phar, patch that in and rebuild the phar ... or use composer.

Thanks!