Phpunit: ์Šค์นผ๋ผ ์œ ํ˜•์— ๋Œ€ํ•œ ์ž๋™ ๋กœ๋”๋ฅผ ํ˜ธ์ถœํ•˜๋Š” assertType()

์— ๋งŒ๋“  2010๋…„ 11์›” 23์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: sebastianbergmann/phpunit

๊ฐ’์ด ๋ฐฐ์—ด์ธ์ง€ ์Šค์นผ๋ผ ๊ฐ’์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด assertType()์„ ์‚ฌ์šฉํ•  ๋•Œ autoloader๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(class_exists() ์‚ฌ์šฉ์˜ ๋ถ€์ž‘์šฉ์œผ๋กœ). ์˜ˆ์ƒ๋˜๋Š” ์œ ํ˜• ๋ฌธ์ž์—ด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ "๋ฐฐ์—ด" ๋˜๋Š” ์Šค์นผ๋ผ ์œ ํ˜•๊ณผ ๋จผ์ € ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

$this->assertType('๋ฐฐ์—ด', array());

์˜ˆ์ƒ: true, ์ž๋™ ๋กœ๋”๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ
์‹ค์ œ: true, "array"๋ผ๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ž๋™ ๋กœ๋” ํ˜ธ์ถœ

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚ด๋ถ€ ์œ ํ˜•์—๋Š” assertType() assertInternalType() ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋“  10 ๋Œ“๊ธ€

๋‚ด๋ถ€ ์œ ํ˜•์—๋Š” assertType() assertInternalType() ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ž‘๋™ํ•˜์ง€๋งŒ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

๋‹ค์Œ์€ assertType์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

public static function assertType($expected, $actual, $message = '')
{
    if (is_string($expected)) {
        if (PHPUnit_Util_Type::isType($expected)) {
            if (class_exists($expected) || interface_exists($expected)) {
                throw new InvalidArgumentException(
                  sprintf('"%s" is ambigious', $expected)
                );
            }

PHPUnit_Util_Type::isType์ด ์ด๋ฏธ ์œ ํ˜•์ด ๋‚ด๋ถ€ ์œ ํ˜•์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ฏ€๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

            if (class_exists($expected, false) || interface_exists($expected, false)) {

๋‚ด๋ถ€ ์œ ํ˜•์— ๋Œ€ํ•œ ์ž๋™ ๋กœ๋”๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” arnoschaefer์˜ ๋ง์— ๋™์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ์˜ ์†”๋ฃจ์…˜์œผ๋กœ ์ถฉ๋ถ„ํ•  ๋•Œ ์™œ ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๊นŒ? < 3.5์—์„œ assertType์„ ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ด๋ฏธ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์†”๋ฃจ์…˜์œผ๋กœ ๋ชจ๋“  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด assertType์„ ์žฌ์ •์˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ ์ด ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ–ˆ๋Š”์ง€ ๋” ์ž˜ ์„ค๋ช…ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด phpunit FAIL์„ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ผ ์ž์‚ฐํ™” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ๊ทธ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•œ ๊ฒƒ์€ ๋‚˜์˜ ์‹ค์ˆ˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ง€๊ธˆ assertInternalType() ์ด ์กด์žฌํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋‹จ์ผ ์–ด์„ค์…˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

๋˜ํ•œ ๊ท€ํ•˜์˜ ๋ฌธ์„œ๋Š” ๋‹ค์Œ ์ง„์ˆ ๊ณผ ๋ชจ์ˆœ๋ฉ๋‹ˆ๋‹ค.

http://www.phpunit.de/manual/3.5/en/api.html#api.assert.assertType :

๋˜๋Š” $expected๋Š” ๋‚ด๋ถ€ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ์ƒ์ˆ˜ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

* PHPUnit_Framework_Constraint_IsType::TYPE_ARRAY ("array")
* PHPUnit_Framework_Constraint_IsType::TYPE_BOOL ("bool")
* PHPUnit_Framework_Constraint_IsType::TYPE_FLOAT ("float")
* PHPUnit_Framework_Constraint_IsType::TYPE_INT ("int")
* PHPUnit_Framework_Constraint_IsType::TYPE_NULL ("null")
* PHPUnit_Framework_Constraint_IsType::TYPE_NUMERIC ("numeric")
* PHPUnit_Framework_Constraint_IsType::TYPE_OBJECT ("object")
* PHPUnit_Framework_Constraint_IsType::TYPE_RESOURCE ("resource")
* PHPUnit_Framework_Constraint_IsType::TYPE_STRING ("string")

์•„๋ž˜์˜ ๋ฉ”๋ชจ๋Š” assertInternalType์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ  ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ์ ๋งŒ "๊ถŒ์žฅ"ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ

๋‚ด๋ถ€ ์œ ํ˜•์„ ํ™•์ธํ•˜๋Š” ๋Œ€์‹  assertInternalType("assertInternalType()" ์„น์…˜ ์ฐธ์กฐ)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ์–ด์„ค์…˜ ๋ฉ”์„œ๋“œ๋Š” ๋ชจํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. String ๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ณ  assertType("string", ...) ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. PHPUnit์ด ์›ํ•˜๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”?

๊ถŒ์žฅ ์‚ฌํ•ญ์€ ํ˜„์žฌ ๊ฒช๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ๋กœ๋”๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๊ณ  assertType() ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PHP๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์ˆ˜ ๋˜๋Š” ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ํ˜„์žฌ ์ฝ”๋“œ์—์„œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ˆ˜(%s๋Š” ๋ชจํ˜ธํ•จ) ์˜ˆ์™ธ๋ฅผ throwํ•˜๋ฏ€๋กœ ํด๋ž˜์Šค๋ฅผ ๋ฌธ์ž์—ด, ์ •์ˆ˜ ๋“ฑ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” 1208ํ–‰์˜ class_exists ๋ฐ interface_exists ํ•จ์ˆ˜์—์„œ autoload ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ false๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™ ๋กœ๋”๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ(์˜ˆ: class.array.php)์„ ํฌํ•จํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  PHP ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์™ธ ๋Œ€์‹ .

์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉด assertType์ด ํ•ญ์ƒ ๊ทธ๋žฌ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ, ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ž๋™ ๋กœ๋“œ๊ฐ€ String ํด๋ž˜์Šค๋ฅผ ์ž๋™ ๋กœ๋“œํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋‚˜/PHPUnit์—๊ฒŒ ์†Œ๋ฆฌ๋ฅผ ์ง€๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋‚ด ์กฐ์–ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ๊ฐ€๊ฑฐ๋‚˜ ๋†”๋‘์‹ญ์‹œ์˜ค.

assertType() ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ(๊ทธ๋ ‡๊ฒŒ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์ง€๋งŒ) ๊ฒฐ๊ตญ ์‚ฌ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ๋ฒ„์ „์˜ PHPUnit์—๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

assertInternalType() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜์— ์ง€์ •๋œ ๋‚ด๋ถ€ ์œ ํ˜•์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

assertInstanceOf() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ฒด์— ์ง€์ •๋œ ์œ ํ˜•(ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค)์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ „ํ˜€ ์šฉ์ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด ์˜ˆ์™ธ๊ฐ€ ์—†์—ˆ๊ณ  ์ด์ œ String ํด๋ž˜์Šค๋ฅผ ์ž๋™ ๋กœ๋“œํ•˜๋Š” ์‚ฌ๋žŒ ๋Œ€์‹  ๋‚ด ์ฝ”๋“œ๋ฅผ ์ค‘๋‹จํ•˜๋Š” phpunit 3.4์—์„œ ์›๋ž˜ ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ phpunit 3.5์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ 3.4 ๊ธฐ๋Šฅ์œผ๋กœ ๋˜๋Œ๋ ค์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ง„์ •ํ•ด, ํฅ๋ถ„ํ•  ํ•„์š” ์—†์–ด. ๋‚˜๋Š” Sebastian์˜ ๊ฒฐ์ •์— ๋”ฐ๋ผ ์‚ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ดํ•ด๊ฐ€ ๊ฐ‘๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์•„๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์•ž์œผ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— assertType์ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด์ „๊ณผ ๊ฐ™์ด ๊ณ„์† ์ž‘๋™ํ•˜๊ณ  ํ–ฅํ›„ ์–ธ์  ๊ฐ€ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฌธ์„œํ™”ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ž์œ  ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ก  Sebastian์˜ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰