Don't get me wrong. I think both projects ar开发者_Go百科e fantastic.
But as both php and ruby developer I wonder if there are there any compelling reasons, besides possible language barrier, why would one choose Behat over Cucumber (with cuke4php) for BDD even when working with php or some php framework.
I'm a Behat developer.
Why I've developed Behat instead of Cucumber customization:
- Speed. There's no simple way to bootstrap/run PHP from Ruby code. This means that you need to implement wires/proxies and other things, which makes your tests insanely slower. And slower tests is not a test, it's just code that eats your customer's money.
- Extensibility. There are very few PHP developers that really know Ruby. It's a hard to use tool, that many don't understand! All examples written for Cucumber are Ruby code and you even can't look at Cucumber sources, because, let's say, you don't know Ruby. It's like buying a submarine when you just need a taxi.
In terms of features, Behat and Cucumber are almost the same (I've worked hard to achieve this). But in terms of speed/extensibility/logic from a PHP developer's perspective - Behat is better, because it's a fast and clean native PHP tool. Behat is not a Cucumber port, as you might think by first, it's built entirely from the ground on PHP 5.3. Behat is trying to simulate Cucumber with its input reading (features) and output formatting (formatters), but it's not a Cucumber port (there are no Ruby syntax constructions in PHP).
Yet another reason why you may need Behat is explained here: https://cucumber.io/blog/bdd/when-cucumbers-go-bad/
If you have PHP project, you may want to create context for internals testing (domain layer, application layer).
I wanted to toss in my two cents on this topic with an answer that addresses various use-cases in a professional setting.
If you are working with other developers on a codebase written primarily in PHP, the advantage boils down to your coworkers.
If your team is more comfortable in PHP because that's what the codebase is written in and people have trouble or are annoyed by context switching to different programming languages (most people are this way in my experience) then it is better to accommodate your team and use Behat. People will complain less and (hopefully) get more done.
If your team is fluent in a variety of languages and most people have no problems switching between using Ruby (cucumber) for acceptance tests and using PHP for everything else, use the language best suited for the job. Ruby is much more expressive than PHP, so cucumber is arguably a better choice.
If your team is more comfortable with PHP than Ruby, then go with Behat. Native compatibility ensures expressiveness and avoids weirdness, besides the fact that it's faster.
精彩评论