Phpunit: PHPUnit_Framework_TestCase์˜ ํ•˜์œ„ ํด๋ž˜์Šค์— ์žˆ๋Š” ์ƒ์„ฑ์ž๋Š” @dataProvider๊ฐ€ ์ค‘๋‹จ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2012๋…„ 08์›” 09์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: sebastianbergmann/phpunit

ํ…Œ์ŠคํŠธ์— ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์œผ๋ฉด ๋ˆ„๋ฝ๋œ ์ธ์ˆ˜์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋กœ dataProvider ์ฃผ์„์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

PHPUnit 3.6.12 by Sebastian Bergmann.

...E

Time: 0 seconds, Memory: 3.25Mb

There was 1 error:

1) Test::testTheProvider
Missing argument 1 for Test::testTheProvider()

/home/nick/development/PHP-1.php:43

FAILURES!
Tests: 4, Assertions: 5, Errors: 1.

์ƒ์„ฑ์ž๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด testTheProvider๊ฐ€ ๋‹ค์‹œ ์ž‘๋™ํ•˜๊ณ  @depends ์ฃผ์„์ด ์†์ƒ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<?php
class Test extends PHPUnit_Framework_TestCase {

    public function __construct() {
        parent::__construct();
    }

    public function testEmpty() {
        $stack = array();
        $this->assertEmpty($stack);

        return $stack;
    }

    /**
     * <strong i="10">@depends</strong> testEmpty
     */
    public function testPush(array $stack) {
        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertNotEmpty($stack);

        return $stack;
    }

    /**
     * <strong i="11">@depends</strong> testPush
     */
    public function testPop(array $stack) {
        $this->assertEquals('foo', array_pop($stack));
        $this->assertEmpty($stack);
    }

    public function theProvider() {
        return array(
            array(true, false)
        );
    }

    /**
     * <strong i="12">@dataProvider</strong> theProvider
     */
    public function testTheProvider($var1, $var2) {
        //$var1 = true;
        //$var2 = false;

        $this->assertNotEquals($var1, $var2);
    }

}
?>

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

๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

ํด๋ž˜์Šค ํ…Œ์ŠคํŠธ ํ™•์žฅ PHPUnit_Framework_TestCase {
๊ณต๊ฐœ ํ•จ์ˆ˜ __construct($name = NULL, ๋ฐฐ์—ด $data = array(), $dataName = '') {
๋ถ€๋ชจ::__construct($์ด๋ฆ„, $๋ฐ์ดํ„ฐ, $๋ฐ์ดํ„ฐ์ด๋ฆ„);
}
}

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

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค. PHPUnit_Framework_TestCase::__construct() ๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด(ํ•ด์„œ๋Š” ์•ˆ ๋จ) ๊ตฌํ˜„์—์„œ ์›๋ž˜ ๊ตฌํ˜„์˜ ๋ชจ๋“  ์ธ์ˆ˜๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ  parent::__construct() ์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ PHPUnit_Framework_TestCase์˜ ์ƒ์„ฑ์ž๋Š” ์ธ์ˆ˜์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•˜๋ฉฐ ์–ด์จŒ๋“  ๋™์ผํ•˜๊ฒŒ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ํŠน๋ณ„ํžˆ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ํ˜ธ์ถœํ•ด๋„ ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด๊ฒƒ์€ ๋ฌธ์„œ(http://www.phpunit.de/manual/current/en/extending-phpunit.html#extending-phpunit.PHPUnit_Framework_TestCase)์— ์–ธ๊ธ‰๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ DBUnit BankAccount ์ƒ˜ํ”Œ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค(https:/ /github.com/sebastianbergmann/dbunit/blob/master/Samples/BankAccountDB/BankAccountDBTest.php#L60).

์ผ๋ถ€ ์ฃผ์„์€ ์ž‘๋™ํ•˜๊ณ  ์ผ๋ถ€ ์ฃผ์„์€ ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์ƒ๋œ ๋™์ž‘์ด๋ผ๊ณ  ๋งํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

ํด๋ž˜์Šค ํ…Œ์ŠคํŠธ ํ™•์žฅ PHPUnit_Framework_TestCase {
๊ณต๊ฐœ ํ•จ์ˆ˜ __construct($name = NULL, ๋ฐฐ์—ด $data = array(), $dataName = '') {
๋ถ€๋ชจ::__construct($์ด๋ฆ„, $๋ฐ์ดํ„ฐ, $๋ฐ์ดํ„ฐ์ด๋ฆ„);
}
}

์•ˆ๋…•,
์ด ๋‹ต๋ณ€์„ ์ฐพ์€ ๊ฒƒ์€ ์šด์ด ์ข‹์•˜๊ณ  ๋งŽ์€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ–ˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ด, @foued611

๋‚ด ๊ฒฝ์šฐ๋Š” ์ด์™€ ๊ฐ™์œผ๋ฉฐ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

# my base test class
use PHPUnit_Framework_TestCase;

class mytest extends PHPUnit_Framework_TestCase {
   public function __construct() {
     # do some common stuff to my tests...
  }
}


class IntegrationTest extends mytest {
  public function __construct() {
     parent::__construct();
  }
   /**
    * <strong i="9">@dataProvider</strong> additionProvider
    */
    public function testAdd($a, $b, $expected)
    {
        $this->assertEquals($expected, $a + $b);
    }

    public function additionProvider()
    {
        return [
            'adding zeros'  => [0, 0, 0],
            'zero plus one' => [0, 1, 1],
            'one plus zero' => [1, 0, 1],
            'one plus one'  => [1, 1, 3]
        ];
    }

}

๊ณ ์ • ๋ฐ ์ž‘๋™ ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# my base test class
use PHPUnit_Framework_TestCase;

class mytest extends PHPUnit_Framework_TestCase {
   public function __construct() {
     # do some common stuff to my tests...
    parent::__construct(...func_get_args());
  }
}


class IntegrationTest extends mytest {
  public function __construct($name = NULL, array $data = array(), $dataName = '') {
    parent::__construct(...func_get_args());
  }
   /**
    * <strong i="13">@dataProvider</strong> additionProvider
    */
    public function testAdd($a, $b, $expected)
    {
        $this->assertEquals($expected, $a + $b);
    }

    public function additionProvider()
    {
        return [
            'adding zeros'  => [0, 0, 0],
            'zero plus one' => [0, 1, 1],
            'one plus zero' => [1, 0, 1],
            'one plus one'  => [1, 1, 3]
        ];
    }

}

ํ˜„์žฌ PHPUnit ๋ฌธ์„œ๋Š” dataProvider๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ __constructor()๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฒฝ๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ •๋ณด๋Š” ํ˜„์žฌ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž ๋ฌธ์„œ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์˜ˆ์ œ dataProvider ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์€ ๊ฒฝ์šฐ์—๋„ ๊ตฌํ˜„์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ์ •์˜ __constructor๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

๋‹ซํ˜€์„œ ํ•‘ @sebastianbergmann

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