0

Laravel プロジェクトで Phpspec を使い始めたところです。

私がテストしているクラスには、次のスキーマがあります。

class Card
{
    /**
     * @var int
     */
    private $rank;

    /**
     * @var int
     */
    private $suit;

    /**
    * @param int $rank
    * @param int $suit
    */
    public function __construct($rank = null, $suit = null);

    /**
     * @return int
     */
    public function getRank();

    /**
     * @return int
     */
    public function getSuit();

    /**
     * @param int $rank
     */
    private function setRank($rank);

    /**
     * @param int $suit
     */
    private function setSuit($suit);
}

非常に単純化されているため、実際のコードは含めません。パラメータが無効な場合は例外がスローされますが、これをコードで更新したい場合はお知らせください。そして、仕様クラスは次のとおりです。

class CardSpec extends ObjectBehavior
{
    const INVALID_PARAM = 'WontWork';
    const INVALID_RANK = 14;
    const INVALID_SUIT = 5;

    const VALID_RANK = 12;
    const VALID_SUIT = 2;

    function it_is_initializable()
    {
        $this->shouldHaveType('Shazzam\Games\Blackjack\Card');
    }

    function it_throws_exception_on_invalid_arguments()
    {
        $this->shouldThrow('\InvalidArgumentException')->during('__construct', [self::INVALID_PARAM, 0]);
        $this->shouldThrow('\InvalidArgumentException')->during('__construct', [self::INVALID_RANK, self::VALID_SUIT]);
        $this->shouldThrow('\InvalidArgumentException')->during('__construct', [self::VALID_RANK, self::INVALID_SUIT]);
    }

    function it_creates_an_object_successfully()
    {
        // Would like to pass parameters and check its values using the get methods
    }
}

無効な引数に対して例外がスローされていることを確認できましたが、コンストラクトの検証に合格し、有効な場合は値を返すことを確認したいと考えています。

私はドキュメントを読みましたが、これを達成する方法を見つけることができませんでした.BDDを完全に理解していないと思います.

この種のテストは単体テストなので、動作テストとは別にする必要がありますか?

4

1 に答える 1

0

もう少し読んだ後、私はこの素晴らしい投稿に出くわしました:

https://laracasts.com/discuss/channels/general-discussion/codeception-phpspec-acceptance-functional-integration-unit-testing

同じ疑問がある場合は、austenc と ozanhazer の回答を確認してください。

その投稿のように、phpspec は機能テストや受け入れテスト用ではありません。

その投稿またはグーグルをチェックして、実装したい種類のテストと適切なツールを一致させてください。

于 2014-11-18T01:00:42.233 に答える