PHP における TDD や BDD はどのような状態ですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/530712

  •  22-08-2019
  •  | 
  •  

質問

PHP の世界では、テストはどの程度普及し、サポートされ、開発されていますか?Javaと同等?Ruby/Rails はどうですか?Google で調べたところ、テスト フレームワークが存在することがわかりましたが、広く使用されているかどうかは疑問です。

主要な PHP IDE には、Eclipse の Java ツールや NetBeans の Ruby/Rails ツールと同じように、テスト ランナーが組み込まれていますか?Rails と同様に、テストは PHP の MVC フレームワークに組み込まれていますか?

私が働いているグループが、PHP アプリを開発する人を雇いたいと考えているため、質問しました。このサポートを依頼されるかもしれないので、品質とメンテナンスが心配です。

役に立ちましたか?

解決

まず、単独の程度php,c#,dにスタイルの試験スイーツには、名前付 アサSimpleTest, ます。

このMVCの枠組み、Symfonyは、独自のテスティングフレームワーク名 石灰, ドイグナイタは、 unit_test 図書館 CakePHP に依存して上記のSimpleTest.

知っているZendオンライン決済システム構築サービスをご利用いただけアサ試験の両方のアサやSimpleTestてのコマンドラインでの統合により他のワークフローが可能です。

ツールのあなたのPHPの世界が開発を活用したいし、スマートショップいます。

の注意くにPHP対応いたします。あるPHPのコミュニティPHPの場として建築ソフトウェア、ならびにPHPなどと交流するウェブサーバー、webブラウザとデータベースを作用した、アプリケーション要素のもの。するべきだと思うんで白黒もとより、連続体;そのソフトウェア開発者側のユニット試験およびテスト駆動開発を支えしていくので、他のプラットフォームを中には"ブとバンチのものかわからないものも結果は"詳細

あの枠組み/カスタム-レガシィの枠組みのPHPコードがく便利な試験用ハーネスです。PHPも貸し出しも簡単にパターンに依存するの存在をブラウザ環境です。な場所だとは思いませんでした証拠をバックアップしていくべき以外に、自分の観測が多くのPHPのショップで気試験終了全に受け入れ試験(セレン)の代替として実際のユニット検査-試験-初等開発。

にお客様の特定の状況、面接の地獄の開発グループが最適です。

  1. いうユニットテスティングフレームワークを使う

  2. ついての記述は、一般的には、現実世界に例のな開発の新機能とそれを支える試験

  3. ついての記述は、一般的には、現実世界での時間を試験しなくなり、しっかり解決への

いは特定の状況をいつ、いかに快適なものについての知識コードを検査します。

他のヒント

私はxUnitのスタイルツールを使用してプロジェクトをTDDたび

、私は困難右の場所に私の頭を取得しています。私は、ビヘイビア駆動開発またはのために設計されたツールを使用すると、「例により、仕様を」は<に私のためにそれが容易になりますことを見つけますhrefが= "http://gojko.net/2010/12/02/the-principle-of-symmetric-change/" のrel = "noreferrer"> TDD右を行う - 設計上、すなわち焦点をさらします意図や特定のコンテキストで記述する行動する のないのテストます。

それは私が会話にペーチを紹介したい、と述べました。プロジェクトサイト上のreadmeから。

  

ペーチはPHP 5.3、ラRSpecのかJSpecための小さなビヘイビア駆動開発ライブラリです。

(JavaScriptのための)

あなたはまだ、より良いJSpecを使用したりした場合、ジャスミン-BDD のペーチのスタイル振る舞いを記述することは、本当に理解しておく必要があります。私は、コンポーネントレベルの仕様のための偉大なこのスタイルを見つけます。あなたは、機能レベルの仕様(ストーリーやユーザー受け入れテスト)を検討 Behat のためのPHPツールを探している場合。

バックペーチに行く、ここではペーチのプロジェクトサイトから抜粋例です。

describe("Bowling", function() {
  it("should score 0 for a gutter game", function() {
    $bowling = new Bowling();
    for ($i=0; $i < 20; $i++) {
      $bowling->hit(0);
    }
    expect($bowling->score)->to_equal(0);
  });
});

はい、それはPHPの仕様です。著者はPHP 5.3+、ラムダとクロージャで新しい辛さを活用することで、これをやってのけることが可能であるようにペーチのソースから見ると、それが見えます。だから私は、これはあなたがPHP <5.3(ちょうどFYI)に基づいて、任意のプロジェクトにペーチを使用することができないことを意味推測します。

また、ペーチは、PHPUnitのかSimpleTestのほど成熟していないです。しかし、私はPHPのコミュニティのBDDの支持者がレガシーのxUnitテストツールを使用することによってもたらされた混乱なし「の例による仕様」やBDDを奨励ペーチのようなツールの成長をサポートするべきだと思います。

私はPHPよりもPythonで多くの作業このごろ。私は、ソフトウェアの仕様を作るためにペーチのような成熟した、コミュニティサポートのツールを持っている場合しかし、私はPHPプロジェクトを拾う次回は、私は非常に幸せになるでしょう。

私はBehat /ミンク http://behat.orgする

との素晴らしい経験を持っていました 他の人がユニットテストプラットフォームは楽しみではないとして、PHPや経験BDDは、あなたが任意のPHPフレームワークを使用している場合に行くための最良の方法であると

私は同意する

レポビルドツールとして作曲のまわりで私の頭をラップの最大の足かせだったが、我々は素晴らしいデザインと回帰テストツールとしてBehatミンクセレンwebdriverをスタンドアロンサーバの瓶を使用することができました。私たちは、ジェンキンスサーバー上の私たちのCakePHPアプリケーションに対する当社の回帰スイートを実行するために使用されるが、それは

ので、非常に十分な「フェイルファスト」ではないことが判明しました

今、私たちのワークフローは次のようになります: ガーキンに物語を作成します。 話を絞り込みます 機能を書いて、新たなステップDEFSをスタブ テストにPHPソリューションをコーディングを開始 そして、最後に、我々はBDDテストでの作業機能やバグ修正がそれをカバーしています。

私たちのセットアップ作業BehatセットアップとUbuntuのVMとすべてのワークステーションにコピー。私たちは、プロセスにそれを焼きました。私達はちょうど新しいものをコーディングを開始、その後のテストを実行し、変更をプルダウンます。

私たちは、自動的にmysqlのダンプを実行し、コードのリファクタリング風にした各機能の前にそれらをロードするシェルスクリプトを書いています。

ミンクWebAssertクラスは、あなたが行動を検証するために必要なすべてのアサーションを提供します 定期的なセッション/ CommonContextクラスは、CSSやXPathを使用して最適です。

私は前に、JavaとRailsのプロジェクトでカピバラ/ webdriverを使用しており、学習曲線/セットアップのオーバーヘッドを見つけBehatに比べて高すぎます。

ライブラリ/フレームワークに加えて、 アラン すでに述べましたが、私がハーネスとして使用している mod_perl の Apache::Test を利用できます。これにより、テストをリリース プロセスに非常に簡単に統合できるようになります。ハーネスが使用するのは、 タップ 出力 (Test Anything Protocol) を使用して、テストが成功したか失敗したかを判断します。次のようなライブラリを使用します。 テスト::簡単 または テスト::詳細 (パール そして PHP).

Apache::Test は、すぐに使用できる状態で、Perl と PHP の両方でのテストの作成をサポートしています。私自身のプロジェクトでは、少し時間がかかりました ちょっとした策略 実際に機能させるには多くの読書が必要ですが、実装は Test::PHP の詳細 ハーネスに内蔵されています。PHP と Perl の両方で書かれたすべてのテストの実行は 1 つのコマンドで実行され、途中で失敗した場合は Apache::Test によってキャプチャされ、何が問題だったかが可能な限り記録されます。

これらすべての素晴らしい点は、PHPUnit (つまり Simple-Test) を前の 2 つのテスト フレームワークと併用することもできることです。それぞれのライブラリでテストを実行することにより、Test::More の PHP 実装 (または標準出力をテストすることで Perl も) を使用し、ハーネスが解釈できるように TAP を吐き出すことができます。

必ずお読みください Apache::テスト ドキュメントと Apache::Test を実行するための mod_perl ガイド. 。さらに、こんな記事も見つけました ここ とても助かりました。

簡単な例として、サイト上のすべてのページ (リンクがある) を実行し、すべての結果を検証するコードをほんの数行で Perl でセットアップすることができます。200 OK' 応答があり、解析エラーはありません。

#!perl

use strict;
use warnings;

use Apache::Test qw(:withtestmore);
use Apache::TestRequest;
use Test::More;
use Test::WWW::Mechanize;
use WWW::CheckSite::Validator;
use WWW::CheckSite::Spider;

plan 'no_plan';

my $config = Apache::Test::config();
my $host = "http://". Apache::TestRequest::hostport($config) || '';

my $s = WWW::CheckSite::Spider->new(
    uri => $host,
    ua_class => 'Test::WWW::Mechanize',
);
my $m = $s->current_agent;

while (my $page = $s->get_page) {
    is($m->status(), "200", $m->uri() ." retrieved successfully.");
    $m->content_lacks("Parse Error", $m->uri() ." does not contain syntax errors.");
}

過去のプロジェクトで、私はPHPUnitのを使用しました、そして、それは望む私を残しています。 テストのPHPUnitの+コマンドライン実行、 あまりにも多くの時間がテストをコーディング過ごしたように、それを作った、十分に速くなかったし、本当に私は好きではなかった方法で、コードのスタイルを制約するように見えた(オブジェクトのテストが容易だった、それはちょっとように見えたので、賛成オブジェクト)。

セレンは、我々はについて話しましたが、プレーに入る程度やったことがなかった解決策だった、と私たちは本当に、出力レベルのテストのようなものの恩恵を受けていると思います。

我々はソフトウェアを改訂してきたように、

この最新のプロジェクトでは、リードプログラマは、より多くの関数型プログラミングのアプローチをとっています。私はTDDを経由してコーディングしたいと述べたとき、彼は私が私がPHPUnitのとして使用するために効果的であったと考えることを日以下でカスタムソリューションを手早く。また、彼は本当にオブジェクト指向対関数型プログラミングの問題についての私の目を開いています。

まずプロジェクト、地上階にに、ゼロから始め、オブジェクト指向コーディング、大規模なユニットテストフレームワーク、それがモノリシックになったとすぐに行き詰まります。第二に、プロジェクト、5年の歴史と古いコード、まだ関数型プログラミングのパラダイムと簡単なテストフレームワークで十分に確立CMSソフトウェアは、(私たちは実際に、多くの場合、PHPのアサートを利用した)、それは単純に得る代わりの複雑さに成長しました。

目のプロジェクトは、あまりにも、(と私はまだそれが有益だと思う)セレンを実装のポイントになったことはありませんが、関数型プログラミングのアプローチは、それが簡単で、コードのテストに対処するために作られています。

私はこの問題は、まだ"研究段階"の把握を行う。私が発見されたものためのRuby on Railsの"きゅうり" http://cukes.info/

その本質は"物語の駆動開発のためのRuby-コンテンツビジネスあるにも関わらのゴールドスタンダードの領域での機能テスト、少なくとも私が見てきた私です。(これが公に、専門家が正しい場合は私の間違った)

一例として言語のきゅうり、なんかのうもとよく似ていてSQL. そうなるとともに人間が読める形式.からcukesフロントページでその言語のようになります。

 Scenario: Add two numbers
      Given I have entered 50 in the calculator
      And I have entered 70 in the calculator
      When I press add
      Then the result should be 120 on the screen

上記のコンパイルや実行しています。

今ことになるすべてのプリアンブルのポイントへの回答質問PHP-BDD&TDD.

に響き渡るコメント、アサを単体テストによればこのブログ記事: http://sebastian-bergmann.de/archives/738-Support-for-BDD-and-Stories-in-PHPUnit-3.3.html にも対応の"物語"のBDDます。

をさらに発展させていくために上記の回答に関して"SIMPLETEST"は、上記のシステムを内蔵ブラウザオブジェクトのクラスブラウザを自動化、アサは拡張のためのセレンのブラウザを自動化 http://seleniumhq.com (最セレンに対すSimpleTestはSelinium行為に関するページはjavascriptをSimpleTestません).

おたのしみください。この情報は役に立てると、この数ヶ月の個人研究体験は試行錯誤の技術です。がある場合は専門家のあり方を明らかにできると改善私はこの趣旨を理解のうえられたことを歓迎します。

  • アレックス.

両方の言語でBDDのテスト機能のマイケル・ブースの比較:

http://mechanicalrobotfish.com /ポスト/ 117-ルビーVS-PHP-BDD-美人コンテスト - ノーコンテスト

は、PHP BDDツールと文化が、この時点では未発達であると結論づけています。

確かに、どちらかの知識の面でのRubyプログラマに利用できるものに匹敵するものはありません(書籍、ビデオ、記事、ブログの投稿)やツール(RSpecの、Shoulda、ファクトリー・ガール、モカ、キュウリ)。

あなたは PHPStorm にチェックアウトする場合があります。私は、IDE内からはPHPUnitを使用するテストランナーが好きます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top