학습
PHP 기본 테스트 기법
PHP 기본 테스트 기법 — 중급
기본 테스트 기법
1. 도입 (왜 배워야 하는가)
소프트웨어 개발에서 테스트는 필수적인 과정입니다. 특히 PHP와 같은 서버 측 언어로 웹 애플리케이션을 개발할 때, 코드의 신뢰성과 품질을 보장하기 위해서는 테스트가 필요합니다. 테스트 기법을 배우지 않으면, 코드가 예상대로 작동하지 않거나, 변경 후에 기존 기능이 망가지는 등의 문제가 발생할 수 있습니다. 이는 고객의 신뢰를 잃고, 유지보수 비용이 증가하는 결과를 초래할 수 있습니다.
2. 핵심 개념 설명
2.1 단위 테스트 (Unit Testing)
단위 테스트는 소프트웨어의 개별 구성 요소(함수, 메서드 등)가 올바르게 작동하는지를 검증하는 테스트입니다. 마치 요리에서 각 재료를 개별적으로 맛보는 것과 같습니다. 각 재료가 맛있어야 전체 요리도 성공할 수 있습니다.
2.2 통합 테스트 (Integration Testing)
통합 테스트는 서로 다른 모듈이 함께 작동하는지를 검증하는 테스트입니다. 이는 마치 여러 가지 재료를 함께 조리하여 최종 요리를 만드는 과정과 비슷합니다. 개별 재료가 맛있더라도, 함께 섞였을 때 맛이 이상해질 수 있습니다.
| 용어 | 정의 |
|---|---|
| 단위 테스트 | 개별 모듈의 기능을 검증하는 테스트 |
3. 기본 코드 예제
다음은 간단한 단위 테스트를 작성하는 예제입니다. PHPUnit를 사용하여 테스트를 작성합니다.
// Calculator.php
class Calculator {
public function add($a, $b) {
return $a + $b;
}
}
// CalculatorTest.php
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase {
public function testAdd() {
$calculator = new Calculator();
$this->assertEquals(4, $calculator->add(2, 2)); // 2 + 2 = 4
$this->assertEquals(0, $calculator->add(2, -2)); // 2 + (-2) = 0
}
}
- 실행 결과:
OK (1 test, 2 assertions)
- Calculator 클래스에서 add 메서드를 정의하여 두 수를 더함.
- CalculatorTest 클래스에서 PHPUnit의 TestCase를 상속받아 테스트 케이스를 작성.
- testAdd 메서드에서 Calculator 인스턴스를 생성하고 assertEquals 메서드를 사용하여 예상 결과와 실제 결과를 비교.
- 테스트가 성공하면 "OK" 메시지가 출력됨.
4. 실전 활용 예제
4.1 쇼핑몰에서 장바구니 기능 구현
장바구니에 상품을 추가하는 기능을 테스트할 수 있습니다.
class Cart {
private $items = [];
public function addItem($item) {
$this->items[] = $item;
}
public function getItems() {
return $this->items;
}
}
// CartTest.php
class CartTest extends TestCase {
public function testAddItem() {
$cart = new Cart();
$cart->addItem('Apple');
$this->assertCount(1, $cart->getItems()); // 장바구니에 아이템이 1개 있는지 확인
}
}
4.2 사용자 인증 기능 테스트
사용자 로그인 기능을 테스트하는 예제입니다.
class User {
private $username;
private $password;
public function __construct($username, $password) {
$this->username = $username;
$this->password = $password;
}
public function login($inputUsername, $inputPassword) {
return $this->username = $inputUsername && $this->password = $inputPassword;
}
}
// UserTest.php
class UserTest extends TestCase {
public function testLogin() {
$user = new User('testuser', 'password123');
$this->assertTrue($user->login('testuser', 'password123')); // 로그인 성공
$this->assertFalse($user->login('testuser', 'wrongpassword')); // 로그인 실패
}
}
5. 흔한 실수와 주의사항
5.1 잘못된 테스트 작성
잘못된 코드
$this->assertEquals(5, $calculator->add(2, 2)); // 잘못된 예상 결과
올바른 코드
$this->assertEquals(4, $calculator->add(2, 2)); // 올바른 예상 결과