2013-08-10 4 views
0

저는 PHPUnit을 처음 사용합니다. 사실 오늘부터 시작했습니다. 그리고 제가 읽고있는 한이 스크립트가하는 것만 이해하게되었습니다.PHPUnit의 테스트 케이스 유형

<?php 
class User { 
    protected $name; 

    public function getName() { 
     return $this->name; 
    } 

    public function setName($name) { 
     $this->name = $name; 
    } 

    public function talk() { 
     return "Hello world!"; 
    } 
} 

이 좋아, 그래서 시험은 시험의 평등에 기초한 확인/실패 문을 반환 설립,하지만 한 제가 찾고 있어요 것은 :이 클래스의

class UserTest extends PHPUnit_Framework_TestCase 
{ 
    protected $user; 

    // test the talk method 
    protected function setUp() { 
     $this->user = new User(); 
     $this->user->setName("Tom"); 
    } 

    protected function tearDown() { 
     unset($this->user); 
    } 

public function testTalk() { 
     $expected = "Hello world!"; 
     $actual = $this->user->talk(); 
     $this->assertEquals($expected, $actual); 
    } 

} 

더. 이 예제에서와 같이 쉽게 결과를 추측 할 수없는 더 복잡한 클래스를 테스트하는 실제 방법이 필요합니다.

말하기, 나는 폴링을 수행하는 스크립트를 작성합니다. 메소드/클래스가 작동 할 수 있다면 어떻게 테스트 할 수 있습니까? 위의 코드는 메서드 결과가 'Hello World' 일 경우에만 보여줍니다. 그러나 복잡한 일을 테스트해야하고 튜토리얼이 많지 않으므로 테스트하기가 너무 쉽습니다.

+0

테스트 할 내용을 구체적으로 알려주지 않았으므로 공개 된 질문입니다. 폴링을 수행하는 스크립트를 작성하면 작성하기 쉬운 방식으로 스크립트를 디자인합니다 해당 스크립트의 개별 구성 요소/기능/메소드에 대한 테스트 사례. 필요에 따라 다른 구성 요소를 조롱하면서 그에 맞게 테스트를 작성하십시오. TDD : 필요한 기본 기능을 설계하십시오. 시험을 쓴다. 그런 다음 코드를 작성하십시오. 따라서 테스트를 염두에두고 코드를 디자인하십시오. –

+0

그래서 설문 조사를 채우기 위해 클래스 메소드를 사용하거나 셀렌과 같은 프런트 엔드 플러그인을 사용하여 테스트를 수행해야합니다. 실제로 프런트 엔드가 최선의 –

답변

5

단위 테스트에서 클래스를 테스트하는 것은 복잡하지 않아야합니다.

그 이유는 제대로 설계된 시스템에서는 해당 클래스를 독립적으로 테스트 할 수 있으며 해당 시스템은 테스트 중에 존재하지 않기 때문에 해당 클래스 뒤에 시스템의 복잡성을 추가하지 않아도된다는 것입니다 , 그것은 조롱입니다.

예를 들어, User 클래스는 일반적으로 데이터베이스에 정보를 요청하지만 테스트 케이스에서는 데이터베이스를 설정하고 데이터로 준비하고 나중에 파기하기 어렵습니다. 실제 데이터베이스를 사용하면 작업 속도가 느려집니다. 따라서 외부에서 데이터베이스 객체를 받아들이도록 User 클래스를 설계하고 테스트 케이스에서는 데이터베이스의 모의 객체를 제공합니다.

그런 식으로 데이터베이스에서 모든 종류의 반환 값을 시뮬레이션하는 것이 매우 간단하며 실제 데이터베이스를 처리하는 복잡성없이 데이터베이스 개체가 올바른 매개 변수를 가져올 지 여부를 확인할 수 있습니다.

클래스가 종속성 주입을 허용하도록 설계된 경우에만 적절한 객체 객체 주입을 수행 할 수 있습니다. 그것은 다른 객체 내부에 객체를 만들지 않겠지 만 외부 세계에 객체를 제공해야한다는 원칙입니다. 그냥 설명은 일부 비디오에서 얼핏 있습니다

을 그리고 좋은 테스트를 작성하는 경험이 필요하다는 것을 기억하십시오. 실험을 시작하는 것이 좋습니다.

2

하지만 복잡한 작업을 테스트해야하기 때문에 테스트하기가 너무 쉽습니다. 튜토리얼이 많지 않습니다.

더 복잡할수록 테스트는 더욱 복잡해집니다. 그것은 마치 자신의 목적으로 물고 사는 뱀과 같습니다. 일반적으로이를 방지하기를 원합니다. 따라서 복잡한 소프트웨어를 테스트하고 실행하는 간단한 테스트를 작성하십시오.

이것은 항상 100 % 작동하지는 않지만 테스트하지 않은 것보다 효과적입니다. PHPUnit은 Unit-Tests (Xunit test patterns) 용으로 설계되었지만 다른 테스트를 실행하기 위해 사용할 수도 있습니다. 이를 위해 테스트를 그룹화합니다. 이것은 다른 사물에 따라 다른 사람들에 의해 다르게 수행됩니다.예를 들어 :

  1. 단위
  2. 통합
  3. 수용을 테스트 테스트 :

    1. 작은 테스트
    2. 중간
    3. 대형 테스트

    또는 (해당되지 않음) 테스트 시험

또는 (TestPyramid 아마도 상당) :

  1. 단위 서비스
  2. UI를 테스트
  3. 테스트는

무엇을하지를 테스트합니다. 테스트를 시작할 때는 단위 테스트로 시작하고 Sven already answered으로 시작하는 것이 좋을 것입니다. TDD에 익숙해지고 슬라이드와 책을 읽으십시오. 그리고 테스트 자동화의 세계에 오신 것을 환영합니다.

P.S. 그렇습니다. 간단한 게터 세터는 너무 쉽게 테스트 할 수 있습니다. 모든 세터가 private 멤버에 저장하고 getter가 다시 가져온다면 PHP가 작동하고 있다는 것을 믿을 수 있습니다. 테스트를 작성하는 것은 시간 낭비이며 단도직입 적으로 만 이어질 것입니다. 코드가 작성된 후 누군가가 테스트를 작성했음을 분명하게 보여줍니다. 대신 테스트를 먼저 작성하고 실패 (빨간색)하는 것을 확인하십시오. 가능한 빨리 코드를 해킹하여 테스트를 통과하십시오 (초록색). 테스트가 이미 작동 중임을 나타내므로 코드를 나중에으로 개선 할 수 있습니다.