>  기사  >  백엔드 개발  >  Yii 프레임워크 공식 가이드 시리즈 보충 자료 39 - 테스트: 단위 테스트

Yii 프레임워크 공식 가이드 시리즈 보충 자료 39 - 테스트: 단위 테스트

黄舟
黄舟원래의
2017-02-15 09:52:391263검색



Yii 테스트 프레임워크는 PHPUnit을 기반으로 구축되었으므로 단위 테스트 작성 방법을 이해하기 전에 PHPUnit 설명서를 자세히 읽어 보는 것이 좋습니다. 아래에서는 Yii에서 단위 테스트 작성의 기본 원칙을 간략하게 요약합니다.

  • 단위 테스트는 CTestCase 또는 CDbTestCase에서 상속된 XyzTest 클래스 형식으로 작성됩니다. 여기서 Xyz는 테스트를 나타냅니다. 예를 들어 Post 클래스를 테스트하려면 그에 따라 테스트 클래스의 이름을 PostTest로 지정합니다. 기본 클래스 CTestCase는 일반 단위 테스트 클래스인 반면 CDbTestCase는 PHPUnit_Framework_TestCase是这两个类的父类 때문에 테스트에만 적합합니다. , 우리는 이것부터 시작할 수 있습니다. 모든 메소드는 클래스에서 상속됩니다.

  • 단위 테스트 클래스는 XyzTest.php 형식으로 PHP 파일에 저장됩니다. 편의상 단위 테스트 파일은 일반적으로 protected/tests/unit文件夹下.

  • 테스트 클래스에는 주로 일련의 testAbc 메서드가 포함되어 있으며, 여기서 Abc는 일반적으로 테스트할 클래스 메서드입니다.

  • 테스트 메서드에는 일반적으로 일련의 어설션 문이 포함됩니다(예:

    , assertTrue), 대상 클래스의 동작을 확인하기 위한 중단점으로 assertEquals

아래에서는 주로 AR 모델 클래스에 대한 단위 테스트를 작성하는 방법을 설명합니다. 데이터베이스별 상태 지원을 제공하기 때문에 CDbTestCase에서 상속합니다. 이전 장에서 데이터베이스별 상태에 대해 자세히 논의했습니다.

블로그 사례에서 Comment 모델 클래스를 테스트하고 싶다고 가정하면 먼저 CommentTest라는 클래스를 만든 다음

:protected/tests/unit/CommentTest.php

class CommentTest extends CDbTestCase
{
    public $fixtures=array(
        'posts'=>'Post',
        'comments'=>'Comment',
    );

    ......
}
로 저장합니다. 이 클래스에서는 멤버 변수

를 이 테스트에 사용할 특정 픽스처가 포함된 배열로 지정합니다. 이 배열은 특정 상태 이름에서 모델 클래스 또는 특정 상태 테이블 이름으로의 매핑을 나타냅니다(예: fixtures에서 posts으로). 특정 상태 테이블 이름으로 매핑할 때는 데이터 테이블 이름 앞에 접두사가 추가되어야 합니다. 모델 클래스 이름을 사용하는 경우 해당 테이블은 특정 상태 테이블로 처리됩니다. 이전에 설명했듯이 특정 상태 테이블은 테스트 메서드가 실행될 때마다 알려진 일부 상태로 재설정됩니다. Post <img src="https://img.php.cn/upload/article/000/000/194/d8454295409f69752ae1c667ca9e3c2e-0.gif" alt="Yii 프레임워크 공식 가이드 시리즈 보충 자료 39 - 테스트: 단위 테스트" class="wp-smiley"> ost특정 상태 이름을 사용하면 테스트 메서드에서 매우 편리한 방식으로 특정 상태 데이터에 액세스할 수 있습니다. 다음 코드는 일반적인 사용법을 보여줍니다.

// return all rows in the 'Comment' fixture table
$comments = $this->comments;
// return the row whose alias is 'sample1' in the `Post` fixture table
$post = $this->posts['sample1'];
// return the AR instance representing the 'sample1' fixture data row
$post = $this->posts('sample1');

참고:

특정 상태 선언이 해당 데이터 테이블 이름(예: )을 사용하는 경우 모델 클래스와 관련된 정보가 더 이상 없기 때문에 위의 세 번째 사용 방법은 유효하지 않습니다.'posts'=>'Yii 프레임워크 공식 가이드 시리즈 보충 자료 39 - 테스트: 단위 테스트ost'

다음,
을 작성해야 합니다. 코드는 매우 간단하고 명확합니다. 먼저 검토할 주석을 삽입한 다음 데이터베이스에서 데이터를 가져와서 최종적으로 승인 메서드를 호출하고 검토를 통과합니다.

public function testApprove()
{
    // insert a comment in pending status
    $comment=new Comment;
    $comment->setAttributes(array(
        &#39;content&#39;=>&#39;comment 1&#39;,
        &#39;status&#39;=>Comment::STATUS_PENDING,
        &#39;createTime&#39;=>time(),
        &#39;author&#39;=>&#39;me&#39;,
        &#39;email&#39;=>[email protected]&#39;,
        &#39;postId&#39;=>$this->posts[&#39;sample1&#39;][&#39;id&#39;],
    ),false);
    $this->assertTrue($comment->save(false));

    // verify the comment is in pending status
    $comment=Comment::model()->findByPk($comment->id);
    $this->assertTrue($comment instanceof Comment);
    $this->assertEquals(Comment::STATUS_PENDING,$comment->status);

    // call approve() and verify the comment is in approved status
    $comment->approve();
    $this->assertEquals(Comment::STATUS_APPROVED,$comment->status);
    $comment=Comment::model()->findByPk($comment->id);
    $this->assertEquals(Comment::STATUS_APPROVED,$comment->status);
}
testApprove方法在Comment模型类中测试approve方法위는 Yii Framework 공식 가이드 시리즈 부록 39 - 테스트: 유닛 테스트의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.