[php] 유닛 테스트 도입기 본문

프로그래밍

[php] 유닛 테스트 도입기

디유비 2020. 12. 9. 23:45

Why?

  • 로직 구현하기도 바쁜데 웬 유닛 테스트? 일만 더 많아지는 거 아냐?
  • 하지만. 로직을 구현해놓고 우리는 한땀한땀 손으로 테스트를 한다.
  • 로직을 수정하고 한땀한땀 손으로 테스트한다.
  • while(true) { 한 땀 한 땀 손으로 테스트한다 }
  • 만약 나 대신 테스트를 자동으로 해주는 프로그램이 있다면!! 얼마나~ 좋게요
  •  + 리팩토링을 할 수 있다
  • + 신규 서비스 런칭 전엔 부하 테스트를 할 수 있다.

그래서 도입해 보았다. 

php unit test framework가 많은데 그중에서 PHPUnit으로 채택했다.

 

Best 9 PHP Frameworks In 2019 For Test Automation

We will compare the best 9 PHP frameworks in 2019 for test automation that eases the job of a tester and ensures faster deployment of your web-application.

www.lambdatest.com

왜냐하면 Xunit Patterns의 member이고 Lalavel framework가 사용하고 있기 때문에 reference가 많고 많은 곳에서 쓰기 때문에 계속해서 개선할 가능성이 높다.

 

현재 쓰고 있는 php 버전이 7.2라서 PHPUnit 8을 적용했지만 9가지 나와 있는 상태다.

원하는 디렉토리 위치에서 composer로 phpunit 8 패키지를 내려받는다.

composer require --dev phpunit/phpunit ^8

vendor 디렉토리와 composer*관련된 파일들이 생성된다.

vi로 composer.json을 열어보면 아래와 같이 나오는데 classmap의 경로를 수정하면 해당 경로에 있는 파일들을 composer가 읽어서 classmap을 구성해 준다.

composer.json을 저장한 다음 

composer dump-autoload

를 하게 되면 classmap이 자동으로 구성되고 이제 테스트 코드를 작성하기만 하면 된다.

 

나는 TDD 보다는 BDD를 선호하기 때문에 PHPUnit\Framework\TestCase 클래스를 그냥 쓰기에는 불필요한 TDD에 대한 지식을 습득해야 하고 처음 접하는 사람도 쉽게 사용할 수 있도록 Wapper class를 하나 더 만들었다.

 

소스코드는 공개할 수 없지만.. 

 

1. getMockBuilder를 이용해서 실제 instance를 호출하는 메소드를 만들었다.

2. 리턴 받은 instance로 실제 메소드들을 호출해서 db 값이 내가 원하는 대로 변경되었는지 확인한다.

3. sucess, fail case 추가해 fail일 경우 내가 원하는 Exception을 던졌는지 확인한다.

 

아직은 도입 초기단계라 이 정도인 것 같다. 

 

php의 최대 단점은 오버 로딩을 지원하지 않아서 __call() 매직 메서드에 욱여넣어야 한다는 것이다.

'프로그래밍' 카테고리의 다른 글

[tmux] 간단 사용법  (0) 2021.01.20
[docker] command-line  (0) 2020.12.10
[php] 자체 프레임 워크에 blade template engine 도입기  (0) 2020.10.11
Comments