많이 사용하는 방법은 작성하고자 하는 Class를 기준으로 테스트 클래스를 생성하여 해당 Class 안에 있는 함수에 대한 테스트 함수를 작성하는 것이다!
아래처럼..
CalcClass -> CalcClassTest
<?php
use PHPUnit\Framework\TestCase;
class StackTest extends TestCase
{
public function testPushAndPop()
{
$stack = [];
$this->assertEquals(0, count($stack));
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
$this->assertEquals(1, count($stack));
$this->assertEquals('foo', array_pop($stack));
$this->assertEquals(0, count($stack));
}
}
?>
위 예제 함수의 명칭이 test로 시작해서 위 함수는 @test 를 붙이지 않고도 테스트 실행이 가능하다.
단위테스트는 한가지의 기능만을 테스트해야 하지만 반드시 캡슐화해야만 하는 것은 아니다. 테스트 방법들 사이에는 숨겨진 암묵적 의존성이 있다.
PHPUnit의 @depends 는 테스트 방법 간의 명시적 종속성 선언을 지원한다. 이러한 의존성은 테스트 방법이 실행되는 순서를 정의하지 않지만, 생산자에 의해 테스트 설비의 값을 반환하고 전달할 수 있다.
/**
* @test
* @testdox 값을 넣은 모델 리턴
* @return void
*/
public function a_can_get_test_model()
{
$model = TestModel::find($this->id);
$this->assertNotEmpty($model);
$model->test_col = 'test입니다.';
return $model
}
/**
* @test
* @testdox 모델의 컬럼값이 생각하는 값과 일치하는지 테스트
* @depends a_can_get_test_model
* @param Model $testModel
* @return void
*/
public function a_can_compare_equal_test_col(Model $testModel)
{
$this->assertEquals($testModel->test_col, 'test입니다.', '값이 일치하지 않습니다.');
}
@depends 는 아래와 같이 여러개를 정의할 수도 있다.
이때 string $first, string $second는 생략해도 되고 명시해도 된다!!
public function testFirst()
{
$this->assertTrue(true);
return 'first';
}
public function testSecond()
{
$this->assertTrue(true);
return 'second';
}
/**
* @depends testFirst
* @depends testSecond
* @return void
*/
public function testMultiple(string $first, string $second)
{
$this->assertEquals(['first','second'], func_get_args());
}
해당 글은 더 좋은 예제가 있다면 추가될 예정입니다 : )