PHP 単体テストツール PHPUNIT の詳しい使い方 (3) ページ 1/2
在本文中,笔者将为大家介绍phpunit中的两个高级概念和用法,尽管它不一定在你的日常单元测试中都用到,但理解和学会它们的用法对学习phpunit还是十分重要的。
Phpunit中的Annotations
如果有其他编程语言经验的开发者,应该对Annotations(注解)不陌生,其实在phpunit中,一个简单的如下面的一段注释也可以认为是Annotations:
class MyTestClass extends PHPUnit_Framework_TestCase
{
/**
* Testing the answer to “do you love unit tests?”
*/
public function testDoYouLoveUnitTests()
{
$love = true;
$this->assertTrue($love);
}
}
?>
可以看到,其实一段以/** **/为标记的文字,就可以认为是一种Annotations,但Annotations其实不单单是简单的注释,它是与一个程序元素相关联信息或者元数据的标注,它不影响程序的运行,但相关的软件工具或框架能够将其转换成特殊的元数据标记,以方便开发者以更少的代码去提高效率(比如通过。如果你熟悉Java,则会发现在Java SE 5中及象Spring等框架中,都大量使用了Annotations。
然而,由于php并不象Java那样是编译性语言,因此本身缺乏去解析Annotations的机制,但幸好phpunit去提供了这样的功能,我们以下面的代码为例:
class MyMathClass
{
/**
* Add two given values together and return sum
*/
public function addValues($a,$b)
{
return $a+$b;
}
}
?>
上面的只是一个简单的加法的例子,为此,我们使用Annotations去编写一个单元测试,在上两篇文章中,我们采用的是手工编写单元测试的方法,而本文中,将介绍使用phpunit命令行的方法,自动生成单元测试的框架,方法如下:
首先把上面的类保存为MyMathClass.php,然后在命令行下运行如下命令:
这时phpunit会自动生成如下的框架单元测试代码:
require_once "/path/to/MyMathClass.php";
/**
* Test class for MyMathClass.
* Generated by PHPUnit on 2011-02-07 at 12:22:07.
*/
class MyMathClassTest extends PHPUnit_Framework_TestCase
{
/**
* @var MyMathClass
*/
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->object = new MyMathClass;
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
/**
* @todo Implement testAddValues().
*/
public function testAddValues()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
"This test has not been implemented yet."
);
}
}
?>
可以看到,phpunit为我们生成的单元测试代码自动引入了原来的MyMathClass.php,同时也生成了setUp和tearDown方法,但唯一的核心单元测试代码是留给了我们编写。如果想在这个基础上更快速的生成我们想要的单元测试代码,要如何实现呢?没错,就是使用annotations!我们可以在原来的MyMathClass.php中加入如下的annotations。
class MyMathClass
{
/**
* Add two given values together and return sum
* @assert (1,2) == 3
*/
public function addValues($a,$b)
{
return $a+$b;
}
}
?>
然后再象上述一样在命令行运行:
这个时候会为我们生成如下的单元测试代码:
/**
* Generated from @assert (1,2) == 3.
*/
public function testAddValues()
{
$this->assertEquals(
3,
$this->object->addValues(1,2)
);
}
?>
看到了么?我们在原有的类中加入了注解@assert(1,2)==3,则phpunit自动为我们生成了正确的单元测试代码。当然,可以参考phpunit手册,学习到更多的关于@assert注解使用的规则。
下面再举一个例子来讲解annotations。假设我们的程序中的一个方法,只是仅需要数据的输入,并且不依赖XML或者数据库提供数据源,则为了测试这个方法,我们可能想到的一个方法是在程序中设置一个测试数据集去测试,但这里介绍一个比较简单的方法,就是使用注解@dataProvider,修改MyMathClass.php如下:
/**
* Data provider for test methods below
*/
public static function provider()
{
return array(
array(1,2,3),
array(4,2,6),
array(1,5,7)
);
}
/**
* Testing addValues returns sum of two values
* @dataProvider provider
*/
public function testAddValues($a,$b,$sum)
{
$this->assertEquals(
$sum,
$this->object->addValues($a,$b)
);
}
?>
ご覧のとおり、ここでは @dataProvider アノテーションが使用されており、テスト ケースのデータ プロバイダーがプロバイダー メソッドによって返される配列であることを示しています。したがって、単体テスト中、配列の 0 番目の要素は $a に割り当てられ、最初の要素は b に割り当てられ、3 番目の要素は sum に割り当てられます。ご覧のとおり、上記の 3 番目の配列は提供されたデータではありません。 1+5 は 7 に等しくないため、単体テストに合格します。
さらに、一般的に使用される 2 つのアノテーションを簡単に紹介します。たとえば、@expectedException アノテーションは、コード内で例外が正しくスローされるかどうかをテストできます。
クラス ExceptionTest extends PHPUnit_Framework_TestCase{
/** * @expectedException InvalidArgumentException
*/
public function testException( ) { }
}
?>
もう 1 つは @cover アノテーションです。その機能は、phpunit がテスト コードのみを生成するクラス内のメソッドまたはスコープを識別することです。
* @covers SampleClass::
* @covers HelperClass
public function testMethod() {
$result = SampleClass::method() ;}

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 開発において、テストは非常に重要なリンクであり、テストによりエラーの発生を大幅に減らし、コードの品質を向上させることができます。モック テストは、コードの特定の機能やシナリオをテストするために、偽のオブジェクトやデータをシミュレートできるテスト形式です。 PHPUnit は PHP で非常に人気のあるテスト フレームワークであり、モック テストをサポートします。この記事では、PHPUnit を模擬テストに使用する方法を検討します。 1. 模擬テストとは何ですか? 始める前に、まず説明しましょう

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

PHP は、Web 開発で広く使用されている一般的なオープン ソース プログラミング言語であり、学習しやすく、使いやすく、拡張性が高いという利点があります。開発者は、コードの品質を確保しながら開発効率を向上させるために、テストとテスト レポートを使用することが不可欠です。 PHP 開発には、多くのテストおよびテスト レポート ツールがあり、その中で最も一般的なのは PHPUnit です。ただし、PHPUnitはシンプルで使いやすいものの、テストケースを書くための基礎知識が必要なため、慣れていないと使いこなすのが難しいです。

毎年、Apple が iOS と macOS の新しいメジャー バージョンをリリースする前に、ユーザーは数か月前にベータ版をダウンロードして最初に体験することができます。同ソフトウェアは一般ユーザーと開発者の両方が使用するため、Appleは開発者向けベータ版のパブリックベータ版である開発者版とパブリック版を両方向けに開始した。 iOS の開発者バージョンとパブリック バージョンの違いは何ですか?文字通りに言うと、開発者バージョンは開発者テスト バージョンであり、パブリック バージョンは公開テスト バージョンです。開発者バージョンとパブリック バージョンは、異なるユーザーを対象としています。開発者バージョンは、Apple が開発者によるテストのために使用します。ダウンロードしてアップグレードするには、Apple 開発者アカウントが必要です。

現代のソフトウェア開発では、コードの品質と仕様は非常に重要な要素です。コードがすっきりして保守しやすくなるだけでなく、コードの読みやすさとスケーラビリティも向上します。しかし、コードの品質と仕様をどのようにチェックするのでしょうか?この記事では、この目標を達成するために PHP と PHPUnit を使用する方法を説明します。ステップ 1: コード仕様を確認する PHP 開発では、PSR (PHP 標準仕様) と呼ばれる非常に一般的なコード仕様があります。 PSR 仕様の目的は、PHP コードをより読みやすく、保守しやすくすることです。で

PHP プロジェクト開発において、単体テストは非常に重要なタスクです。 PHPUnit と Mockery は、2 つの非常に人気のある PHP 単体テスト フレームワークです。PHPUnit は広く使用されている単体テスト ツールであり、Mockery は、オブジェクト モックを作成および管理するための統一された簡潔な API の提供に重点を置いたオブジェクト シミュレーション ツールです。 PHPUnit と Mockery を使用することで、開発者は単体テストを迅速かつ効率的に実行して、コード ベースの正確性と安定性を確認できます。

PHP プログラミングにおける一般的なコード品質ツールは何ですか?現代のソフトウェア開発では、コードの品質が非常に重要です。コードの品質が良くないと、コードの可読性が低下し、メンテナンスが困難になるだけでなく、セキュリティの脆弱性などのさまざまな問題が発生します。 PHP プログラミングでは、いくつかのコード品質ツールを使用してコードの品質をチェックできます。この記事では、一般的な PHP コード品質ツールをいくつか紹介します。 PHP_CodeSnifferPHP_CodeSniffer は、PHP コードの静的分析のためのツールです。

コードの品質をチェックすることは、すべてのプログラマーが行う必要があるタスクです。PHP には、コードの品質とスタイルをチェックするために使用できるツールが多数あります。これにより、コードの可読性と保守性が向上し、コードの信頼性とセキュリティが向上します。コード、性別。この記事では、いくつかの一般的な PHP コード検査ツールを紹介し、それらの簡単な比較と評価を行います。読者が開発プロセス中に適切なツールを選択し、コードの品質と効率を向上させるのに役立つことを願っています。 PHP_CodeSnifferPHP_CodeSniffer は広く使用されています
