
PHPUnit 4.0 Released - message
https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-4.0.0
======
girvo
This is pretty exciting for me. At least, it would be (it seems like a drop in
replacement, as the backwards compat breaking changes are really rarely used
in production IME) -- except I've moved to _`nette /tester'_ [0][1]. It's much
much lighter (in features as well as run-time) but the trade-off is a
seriously nice API, that includes even a nice DOM tester for integration work.

The HHVM support is most exciting for myself. I've moved production websites
and personal projects all over to nginx + HHVM, and I've not run into any
issues since the end of last year.

Now, all I want is Facebook's "Hack" language to be formally documented. My
personal tests show that the optional gradual H-M typing + HHVM's speed +
PHP's benefits === Awesome. PHP has come a long way in the past few years.

[0] [http://tester.nette.org/](http://tester.nette.org/) [1]
[https://github.com/nette/tester](https://github.com/nette/tester)

~~~
frik
The best introduction about Facebook's "Hack" language I found:

Part 1: [http://www.sitepoint.com/hhvm-hack-
part-1/](http://www.sitepoint.com/hhvm-hack-part-1/)

Part 2: [http://www.sitepoint.com/look-hack-php-replacement-
hhvm/](http://www.sitepoint.com/look-hack-php-replacement-hhvm/)

Would be great if Facebook would publish more official information.

~~~
racketeer
I went to an SFPHP meetup the other day. Sounds like it's coming very soon.

------
mantrax
My litmus test about a package is can I reduce it to one line of code, for 80%
of the benefits. If yes, it's useless.

assert($condition);

It's useless.

~~~
kalleboo
Great, now when a test fails, your resources are left in an inconsistent
state. How do you deal with that?

~~~
mantrax
Good question. This won't happen. You know why? Whether a test fails, or
succeeds, the PHP request is over.

What happened to all those people proud of PHP's principles? "Shared nothing",
remember? Why on earth would your tests _share_ resources and state? This is
not Java. It's PHP.

Look at PHP's own tests: PHPT files. They're simple files containing code to
setup a test, and the result of a test.

How tests run, well, in a nutshell:

foreach (glob('/tests/*' as $test)) exec('php ' . $test);

Then you check the logs. You can have your little pretty log formatted if you
want, but it's not that important:

\- If there's stuff in the log, your test failed, you go check why.

\- If there's no stuff in the log, you're good to go.

It can catch output, exceptions, even fatal errors. Can PHPUnit catch fatal
errors? You need to use its "process isolation features", which is just
reinventing the wheel by doing... what I just did in that one-liner above.
Well I did it! Process isolation! And I didn't need PHPUnit to do it.

A lot of those "modern PHP" libraries are basically a masochistic exercise in
copying designs that make sense in Java into PHP where they make no sense.

PHPT style tests wouldn't make sense in Java. And Java style Unit test
frameworks make no sense in PHP.

However all those blindly supporting this, can please continue to waste their
time, for the benefit of making sure they're buzzword compliant & in sync with
groupthink.

"I write my mocks and fixtures in PHPUnit. Oh yeah it has all the latest
assertions, like you can assert XML using CSS selectors". I can almost hear
the collective taps on my back just saying this out loud.

~~~
cool_story_bro
> Look at PHP's own tests: PHPT files. They're simple files containing code to
> setup a test, and the result of a test.

> How tests run, well, in a nutshell:

> foreach (glob('/tests/*' as $test)) exec('php ' . $test);

This fails your own litmus test. The PHPT runner that ships with PHP is
actually thousands of lines long: [https://github.com/php/php-
src/blob/7b7d2952a606fba6a5e21998...](https://github.com/php/php-
src/blob/7b7d2952a606fba6a5e219986a7675411cc4ba42/run-tests.php)

Keep in mind that PHPT files have to be parsed in userland. The runner has to
pull out the --TEST-- section from each file, write it to a temp file and then
execute the temp file in a separate PHP process. It's actually an incredibly
slow way to test your code. I have test suites where thousands of PHPUnit
tests execute an order of magnitude faster than dozens of PHPT files.

> "Oh yeah it has all the latest assertions, like you can assert XML using CSS
> selectors".

The value of PHPUnit isn't really the assertions. It's true that most of the
assertions can be replaced with a single line of code. The main exception is
assertEquals which requires some special consideration for recursive objects,
canonicalization, floating points, etc.

The biggest selling point for my team is the ecosystem. PHPUnit integrates
with a number of IDEs, continuous integration platforms, ticketing systems,
profiling tools, code coverage tools, code quality tools, etc.

