> php教程 > php手册 > PHPunit 스텁 시뮬레이션 반환 데이터에 대한 첫 소개

PHPunit 스텁 시뮬레이션 반환 데이터에 대한 첫 소개

WBOY
풀어 주다: 2016-10-08 16:04:47
원래의
1483명이 탐색했습니다.

이 기간 동안 제가 배운 지식을 기록하고 이를 보완하여 배운 내용을 개선할 수 있도록 PHPunit 문서와 전문가의 설명을 결합한 것입니다.

우리는 일반적으로 회사 비즈니스에서 코드를 테스트하기 위해 단일 테스트를 사용하며, 이는 귀하의 생각이 충분히 포괄적이지 않은 모든 작은 부분을 찾는 데 도움이 될 것입니다. (다니엘은 단위 테스트를 먼저 작성한 뒤 구현 코드를 작성하면 된다고 했지만, 아직 갈 길이 멀다는 걸 느낀다)

스텁(stub):

 "구성된 반환 값을 (선택적으로) 반환하는 테스트 더블로 객체를 대체하는 실용적인 방법을 스텁이라고 합니다." - 이것은 스테이킹에 대한 공식 설명입니다. 문서

이제 돌이켜보니 이해가 되네요. 배를 가져 가세요.

====전제

테스트하고 싶은 방법은 다음과 같습니다. switchClothes($username) ---- 성별이 1이면 바지가 반환되고, 성별이 0이면 스커트가 반환됩니다.

<?<span style="color: #000000;">php
        </span><span style="color: #0000ff;">Class</span> <span style="color: #0000ff;">Switch</span><span style="color: #000000;">{
            </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> switchClothes(<span style="color: #800080;">$username</span><span style="color: #000000;">){
                </span><span style="color: #800080;">$database</span>=<span style="color: #0000ff;">new</span><span style="color: #000000;"> database();
                </span><span style="color: #800080;">$gender</span>=<span style="color: #800080;">$databse</span>->find("id=<span style="color: #800080;">$username</span>")<span style="color: #000000;">;
                </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$gender</span>==0<span style="color: #000000;">){
                        </span><span style="color: #0000ff;">return</span> "裙子"<span style="color: #000000;">;
                }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
                        </span><span style="color: #0000ff;">return</span> "裤子"<span style="color: #000000;">;
                }
            }
        }</span>
로그인 후 복사

데이터베이스를 쿼리하기 위해 데이터베이스 클래스 find()를 캡슐화했습니다.

====테스트 작성 시작

우선 테스트해야 할 것은 switchClothes 클래스인데 이 클래스에서는 데이터베이스 클래스를 인스턴스화하고 select 메소드를 사용하여 데이터베이스에 쿼리한 다음 바지를 원하는지 스커트를 원하는지 알아내야 합니다. 그러면 정말 번거롭습니다. 이 방법의 논리를 테스트하고 싶습니다. 데이터베이스가 중단되면 어떻게 되나요? 사용자 이름이 존재하지 않으면 이러한 데이터를 생성하기 위해 데이터베이스로 이동해야 합니까? 문제가 있고 충분하지 않습니다. 데이터 업데이트를 포함하는 방법을 테스트해야 하는 경우 실제로 데이터를 수정해야 합니까?

스텁이 화려하게 도착했습니다. 엄마는 더 이상 내가 데이터베이스를 조작해야 하는 것에 대해 걱정할 필요가 없고, 인터페이스가 이해하기 어려운 것에 대해 걱정할 필요가 없습니다.

 

이 클래스를 스텁할 수 있습니다. 쉽게 말하면 이 클래스의 시뮬레이션이고 가짜 데이터베이스 클래스라고 생각합니다.

위와 같이 A=switchClothes B=데이터베이스 클래스 D=데이터베이스 C=스텁 클래스

원래 A는 B를 호출했고, B는 데이터베이스를 쿼리했습니다.

하지만 C의 존재는 빨간색 선입니다. C는 데이터베이스를 확인하지 않습니다. C는 내부에서 1 또는 0을 반환하도록 지정할 수 있습니다. 적어도 A의 관점에서는 그렇습니다. B와 동일합니다. 어쨌든, 그것은 나에게 0 또는 1을 반환할 것입니다. 이는 C가 시스템 A를 B와 D로부터 분리하여 결합을 줄인다는 것을 의미합니다.

그러면 나에게 필요한 C 구축을 시작할 수 있습니다.

 

<?<span style="color: #000000;">php
</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> PHPUnit\Framework\TestCase;

</span><span style="color: #0000ff;">class</span> StubTest <span style="color: #0000ff;">extends</span><span style="color: #000000;"> TestCase
{
    

    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> testStub()
    {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 为database类建立桩件。</span>
        <span style="color: #800080;">$stub</span> = <span style="color: #800080;">$this</span>->getMockBuilder("database"<span style="color: #000000;">)//类名
                             </span>->setMethods(<span style="color: #0000ff;">array</span>('find')) <span style="color: #008000;">//</span><span style="color: #008000;">可以是多个方法</span>
                              -><span style="color: #000000;">getMock();

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 配置桩件。</span>
        <span style="color: #800080;">$stub</span>->method('find'<span style="color: #000000;">)//想要设置返回值的方法
             </span>->willReturn(0<span style="color: #000000;">);//设置返回值 

        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 现在调用 $stub->select() 将返回 '裙子'。</span>
        <span style="color: #800080;">$this</span>->assertEquals('裙子', <span style="color: #800080;">$stub</span>-><span style="color: #000000;">find());
    }
}
</span>?>                
로그인 후 복사

C입니다.

단일 시험을 볼 때는 빨간색 경로를 택하세요.

모두

 

 

 

  

 

 

 

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿