ホームページ php教程 php手册 PHP 単体テストツール PHPUNIT の詳しい使い方 (3) ページ 1/2

PHP 単体テストツール PHPUNIT の詳しい使い方 (3) ページ 1/2

Jun 21, 2016 am 08:55 AM
function phpunit public

在本文中,笔者将为大家介绍phpunit中的两个高级概念和用法,尽管它不一定在你的日常单元测试中都用到,但理解和学会它们的用法对学习phpunit还是十分重要的。

  Phpunit中的Annotations

  如果有其他编程语言经验的开发者,应该对Annotations(注解)不陌生,其实在phpunit中,一个简单的如下面的一段注释也可以认为是Annotations:

php
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去提供了这样的功能,我们以下面的代码为例:

php
class MyMathClass
{
/**
* Add two given values together and return sum
*/
public function addValues($a,$b)
{
return $a+$b;
}
}
?>

  上面的只是一个简单的加法的例子,为此,我们使用Annotations去编写一个单元测试,在上两篇文章中,我们采用的是手工编写单元测试的方法,而本文中,将介绍使用phpunit命令行的方法,自动生成单元测试的框架,方法如下:

  首先把上面的类保存为MyMathClass.php,然后在命令行下运行如下命令:

phpunit –skeleton-test MyMathClass

  这时phpunit会自动生成如下的框架单元测试代码:

php
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。

php
class MyMathClass
{
/**
* Add two given values together and return sum
* @assert (1,2) == 3
*/
public function addValues($a,$b)
{
return $a+$b;
}
}
?>

  然后再象上述一样在命令行运行:

phpunit –skeleton-test MyMathClass

  这个时候会为我们生成如下的单元测试代码:

php
/**
* 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如下:

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 アノテーションは、コード内で例外が正しくスローされるかどうかをテストできます。

phprequire_once "PHPUnit/Framework.php"; >
クラス ExceptionTest extends PHPUnit_Framework_TestCase{
/** * @expectedException InvalidArgumentException
*/
public function testException( ) { }
}


?>
ここでは、アノテーション メソッドを使用して、testException でスローする必要がある例外の種類が InvalidArgumentException であることを示します。

もう 1 つは @cover アノテーションです。その機能は、phpunit がテスト コードのみを生成するクラス内のメソッドまたはスコープを識別することです。

/** * @covers SampleClass::publicMethod
* @covers SampleClass::
* @covers HelperClass

*/
public function testMethod() {

$result = SampleClass::method() ;}

次に、phpunit は、SampleClass クラスの publicMethod メソッド、SampleClass クラスのすべての非 public 宣言メソッド、および HelperClass クラスまたはその親クラスの 1 つの単体テスト コードのみを生成します。




このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP開発でのモックテストにPHPUnitを使用する方法 PHP開発でのモックテストにPHPUnitを使用する方法 Jun 27, 2023 am 10:25 AM

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

機能とはどういう意味ですか? 機能とはどういう意味ですか? Aug 04, 2023 am 10:33 AM

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

PHP のテストレポートツール PHP のテストレポートツール May 24, 2023 am 08:24 AM

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

iOS の開発者バージョンとパブリック バージョンの違いは何ですか? iOS の開発者バージョンとパブリック バージョンの違いは何ですか? Mar 01, 2024 pm 12:55 PM

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

PHP と PHPUnit を使用してコードの規則と品質をチェックする方法 PHP と PHPUnit を使用してコードの規則と品質をチェックする方法 Jun 25, 2023 pm 04:57 PM

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

PHPUnit と Mockery を単体テストに使用するにはどうすればよいですか? PHPUnit と Mockery を単体テストに使用するにはどうすればよいですか? May 31, 2023 pm 04:10 PM

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

PHP プログラミングにおける一般的なコード品質ツールは何ですか? PHP プログラミングにおける一般的なコード品質ツールは何ですか? Jun 12, 2023 am 08:16 AM

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

PHP のコード検査ツール PHP のコード検査ツール May 24, 2023 pm 12:01 PM

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

See all articles