이 기간 동안 제가 배운 지식을 기록하고, 나중에 참고할 수 있도록 보완하고, 배운 내용을 개선하고자 하는 PHPunit 문서와 전문가의 설명을 결합한 것입니다.
우리는 일반적으로 단일 테스트를 사용하여 회사를 테스트하십시오. 비즈니스에서 코드를 테스트하면 귀하의 생각이 충분히 포괄적이지 않은 작은 영역을 찾는 데 도움이 될 것입니다. (다니엘이 단위 테스트를 먼저 작성한 뒤 구현 코드를 작성하면 된다고 했지만 지금은 아직 멀었다고 느낀다)
stub(스텁):
"선택적으로 구성된 반환 값을 반환하는 테스트 더블로 개체를 대체하는 실용적인 방법을 스텁이라고 합니다." - 공식 문서에서 제공하는 스텁에 대한 설명입니다.
이제 다음을 수행할 수 있습니다. 돌이켜보면 이해가 된다. 어떻게 표현해야 할까? 배를 가져 가세요.
==== 전제
테스트하고 싶은 방법은 다음과 같습니다. switchClothes($username) ---- 이름으로 데이터베이스를 쿼리하면 바지가 됩니다. 예 0, 스커트를 반환합니다.
<?php Class Switch{ public function switchClothes($username){ $database=new database(); $gender=$databse->find("id=$username"); if($gender==0){ return "裙子"; }else{ return "裤子"; } } }
데이터베이스를 쿼리하기 위해 데이터베이스 클래스를 캡슐화했습니다. find()
====Start 테스트 작성
가장 먼저 테스트해야 할 것은 switchClothes 클래스인데, 이 클래스에서는 데이터베이스 클래스를 인스턴스화하고 select 메서드를 사용하고 데이터베이스에 쿼리한 다음 바지를 원하는지 또는 바지를 원하는지 알아내야 합니다. 스커트. 그러면 정말 번거롭습니다. 이 방법의 논리를 테스트하고 싶습니다. 데이터베이스가 중단되면 어떻게 되나요? 사용자 이름이 존재하지 않으면 이러한 데이터를 생성하기 위해 데이터베이스로 이동해야 합니까? 문제가 있고 충분하지 않습니다. 데이터 업데이트를 포함하는 메서드를 테스트해야 하는 경우 실제로 데이터를 수정해야 합니까?
스텁이 화려하게 도착했습니다. 엄마는 더 이상 내가 데이터베이스를 운영하는 것에 대해 걱정할 필요가 없고, 인터페이스가 이해하기 어려운 것에 대해 걱정할 필요가 없습니다.
이 클래스를 스텁할 수 있습니다. 쉽게 말하면 이 클래스의 시뮬레이션이고 가짜 데이터베이스 클래스라고 생각합니다
위와 같습니다. A=switchClothes B=database class D=database C=stub class
원래 A는 B를 호출해야 하고 B는 데이터베이스를 쿼리합니다.
하지만 C의 존재는 데이터베이스를 확인하지 않습니다. C는 내가 제어할 수 있습니다. inside는 1 또는 0을 반환합니다. 적어도 A의 관점에서는 B와 동일합니다. 어쨌든 나에게는 0 또는 1이 반환됩니다. 이는 C가 시스템 A를 B와 D로부터 분리하여 결합을 줄인다는 것을 의미합니다.
그런 다음 필요한 C 구성을 시작할 수 있습니다.
<?php use PHPUnit\Framework\TestCase; class StubTest extends TestCase { public function testStub() { // 为database类建立桩件。 $stub = $this->getMockBuilder("database")//类名 ->setMethods(array('find')) //可以是多个方法 ->getMock(); // 配置桩件。 $stub->method('find')//想要设置返回值的方法 ->willReturn(0);//设置返回值 // 现在调用 $stub->select() 将返回 '裙子'。 $this->assertEquals('裙子', $stub->find()); } } ?>
C입니다.
단일 시험을 볼 때는 빨간색 경로를 택하세요.
모두