'unittest'에 해당되는 글 4건

  1. 2011.06.01 QUnit callback
  2. 2011.06.01 QUnit
  3. 2009.03.18 [UnitTest] SameTest
  4. 2008.03.22 PHP Unit Test :: sameTest
Programming/Javascript2011.06.01 13:33
Callback functions
  • QUnit.log({result, actual, expected, message})
  • Assertion 이 종료되었을 때 호출. result 는 boolean. message는 string
  • QUnit.start({name})
  • 하나의 test가 시작될 때 호출 , setup 과 같음
  • QUnit.testDown({name, failed, passed, total})
  • 하나의 test가 완료되었을 때 실행 , teardown 과 같음
  • QUnit.moduleStart({name})
  • 새로운 모듈의 test가 실행될 때 호출
  • QUnit.moduleDone({name, failed, passed, total})
  • 모듈의 test가 모두 완료되었을 때 호출
  • QUnit.begin() 
  • 테스트의 시작 전 한번만 호출된다.
  • QUnit.done({failed, passed, total, runtime}) 
    테스트가 모두 끝났을 때 호출된다. Runtime은 실행시간으로 milliseconds 이다. 

QUnit.testDone = function(param){
	alert("name : "+param.name+"\n"+
		"failed : "+param.failed+"\n"+
		"passed : "+param.passed+"\n"+
		"total : "+param.total+"\n");
}

테스트 전에 위의 코드를 넣게 되면 하나의 test가 끝날때마다 alert으로 이름, 실패, 성공, 전체 수를 알려주게 됩니다.
이와 같은 방식으로 callback함수를 사용하여 원하는 테스트를 만들 수 있습니다. 
신고
Posted by 초프(초보 프로그래머)
Programming/Javascript2011.06.01 11:42
자바스크립트를 단위테스트하는 QUnit 입니다.
JQuery 도 QUnit으로 테스트했다고 합니다.
사용법이 간단해서 간단한 예제를 적어 봅니다.

 

$(document).ready(function(){
	test("OK Test", 2, function(){
		// OK test 라는 이름으로 2번의 assertion을 기대
		ok(true);
		ok(false, "not true! only true is pass");
	});

	test("Expected Test", 1, function(){
		// 기대하는 assertion 횟수가 달라서 실패
	});

	test("Equals Test", 4, function(){ 
		// Equals Test 라는 이름으로 5번의 assertion을 기대
		equal(1,true);
		equal("1",1);
		equal(1,1);
		notEqual(1,false,"not equal");
	}); // 모두 통과

	test("Strict Equal Test", function(){
		// Strict Equal Test 라는 이름으로 기대하는 assertion 횟수 없음
		strictEqual(1,1);
		strictEqual("1",1, "type dismatch"); // 실패 메시지 포함
	}); // 한 개 통과

	test("Deep Equal Test", function(){
		// 안에 있는 값들이 모두 동일한지 확인하는 테스트
		var value1 = [1,2,3];
		var value2 = [1,2,"3"];
		var value3 = [value1, [4,5,[0]]];
		var value4 = [value1, [4,5,[false]]];

		notDeepEqual(value1, value2, "type dismatch");
		notDeepEqual(value3, value4);
		deepEqual(value3, [[1,2,3],[4,5,[0]]]);
	});

	test("Raisses Test", function(){
		// 예외 발생을 확인하는 테스트
		function Exception(){};
		function AException(){};

		raises(function(){
			throw new Exception();
		}, Exception); // 예외 지정

		raises(function(){
			throw new Exception();
		}); // 예외 지정하지 않음

		raises(function(){
			throw new Exception();
		}, AException, "This is not AException"); // 기대하는 예외와 틀림

		raises(function(){
			// 예외 없음
		}, Exception, "No Exception");
	});
});



신고
Posted by 초프(초보 프로그래머)
Project2009.03.18 14:40

 테스팅도구인 UnitTest 그중에서 PHP에서 쓰는 테스트툴들이 몇가지 있다. 이전 버전의 프레임워크를 만들때 만들어 두었던 유닛테스트.. 일명 SameTest ! PHPUnit 이랑 비슷할수도 있을듯...; 써본게 그거라;

아직 고급기능은 없고 단순한 비교기능만 있을뿐이다.

sameValue($mHope, $mValue) - 두값을 비교(데이터타입,값)
sameType($type, $mValue) - 데이터 타입을 비교
sameClass($sName,$oClass) - 인스턴스의 클래스이름 비교
sameInt($mValue), sameInteger($mValue) - 정수형인가
sameFloat($mValue), sameDouble($mValue) - 실수형인가
sameString($mValue) - 문자열인가
sameObject($mValue) - 오브젝트(인스턴스) 인가
sameBool($mValue), sameBoolean($mValue) - Boolean형인가
sameArray($mValue) - 배열인가
sameResource($mValue) - 리소스인가
sameNull($mValue) - NULL인가
sameTrue($mValue) - True 인가
sameFalse($mValue) - False 인가

테스트 소스는 다음과 같다.

<?
require_once "../setup/setup.php";
require_once _FW_UNITTEST_PATH_."/sametest.php";
require_once _FW_DATA_PATH_."/int.php";
require_once _FW_DATA_PATH_."/float.php";

class Test_data extends SameTest
{
 private $oInt;
 private $oFloat;

 function before()
 {
  $this->oInt = new Int();
  $this->oFloat = new Float();
 }

 function Test_int()
 {
  $this->sameValue($this->oInt->get(),0);

  $this->oInt->set(123);
  $this->sameValue($this->oInt->get(),123);

  $this->oInt->set(123.45);
  $this->sameValue($this->oInt->get(),123);
 }

 function Test_float()
 {
  $this->sameValue($this->oFloat->get(),0.0);

  $this->oFloat->set(123);
  $this->sameValue($this->oFloat->get(),123.0);

  $this->oFloat->set(123.45);
  $this->sameValue($this->oFloat->get(),123.45);

  $this->sameValue($this->oFloat->round(1),123.5);
  $this->sameValue($this->oFloat->round(0),123.0);
  $this->sameValue($this->oFloat->floor(),123.0);
 }

 function Test_etc()
 {
  $this->oInt->set("abc");
  $this->sameInt($this->oInt->get());
  $this->sameValue($this->oInt->get(),0);

  $this->oInt->set(array(1,2,3));
  $this->sameInt($this->oInt->get());
  $this->sameValue($this->oInt->get(),1);

  $this->oInt->set(true);
  $this->sameInt($this->oInt->get());
  $this->sameValue($this->oInt->get(),1);
  $this->oInt->set(false);
  $this->sameInt($this->oInt->get());
  $this->sameValue($this->oInt->get(),0);

  $this->oFloat->set("abc");
  $this->sameFloat($this->oFloat->get());
  $this->sameInt($this->oFloat->get());
  $this->sameValue($this->oFloat->get(),0.0);
 }
}

$oTest = new Test_data();
$oTest->startTest();

?>

테스트 결과이다.

`Test_` 로 시작하는 메소드들이 테스트된다. 각 메소드별로 성공,실패 여부가 나온다. 특히 한번에 알아보기 쉽도록 오류가 있는 메소드를 빨간색으로 표시하도록 했음.

before(), after() 메소드는 테스트가 시작전 시작후에 한번씩만 실행되는 함수이다. 여기서는 테스트가 먹히지 않는다.
beforeTest(), afterTest() 메소드는 테스트메소드가 실행되기전과 실행후에 실행되므로 실행횟수는 테스트메소드의 갯수와 같다. 그리고 테스트중에 echo를 사용하여 출력할 경우 제일 위에 흰색 배경에 나오지만... 보기에 별로라서... 버퍼를 이용해서 테스트 화면 안에 출력되게 하였다.
이게 before(), after(), beforeTest(), afterTest() 를 모두 사용한 테스트이다. 이네개 안에서 echo만 사용해서 문자열만 출력되게 하였다.

테스트화면은 웹표준을 적용해서 통과를 받은건데.... 그 당시에는... 현재는 잘 모르겠네요;;

다른 유닛테스트에는 어떤 기능이 있는지 모르겠고 또 필요한 테스트기능이 뭔지 몰라서 현재에 만족하고 있음;

또 다른 무엇이 필요할까~?

신고
Posted by 초프(초보 프로그래머)
Project2008.03.22 01:18
PHP Unit Test 를 사용할려고

PHPUnit을 알아봤는데 콘솔으로 해야하는 단점이 있어서 만들어봤음;

현재 되는 기능은

전체 테스트의 before, after 와

테스트 매소드마다 before,after 실행과 실행시 출력되는 html문 표시

sameValue : 두개값이 동일한지 비교
sameType : 한개의 값이 지정한 변수형이랑 일치하는지 확인

사용자 삽입 이미지

테스트 결과이다.
모든 before,after를 이용하지 않고 실행한 결과이다.

아래는 모든 before,after를 사용한 결과이다. 그냥 echo로 글만 찍어줬음;

사용자 삽입 이미지

좀 애매했던 에러라인 출력을 끝냈으니

기능을 좀더 보안해야할거 같음.
신고
Posted by 초프(초보 프로그래머)
TAG php, unittest