勉強日記

チラ裏

PHPUnit自作アサーション/HTMLを解析するテスト3 動線の存在のテスト、negate, composition

f:id:wand_ta:20191119002619p:plain

  • 動線の存在のアサート

phpunit_constraints/HtmlAssertions.php at master · wand2016/phpunit_constraints · GitHub

  • 否定形のアサート

phpunit_constraints/HtmlAssertions.php at master · wand2016/phpunit_constraints · GitHub

モチベーション

  • 画面遷移仕様のテストを書きたい
    • 「○○画面への動線がある」
    • 「権限aがない場合はA画面への動線がない」

学び

  • 「存在」のアサートを生やすと、「存在しない」のアサートも生やしたくなるのが人情というもの
  • PHPUnitでは、Constraintの否定・合成を行うことができる
<?php
...
    /**
     * Asserts that two variables are not equal.
     *
     * @param mixed  $expected
     * @param mixed  $actual
     * @param string $message
     * @param float  $delta
     * @param int    $maxDepth
     * @param bool   $canonicalize
     * @param bool   $ignoreCase
     */
    public static function assertNotEquals($expected, $actual, $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
    {
        $constraint = new LogicalNot(
            new IsEqual(
                $expected,
                $delta,
                $maxDepth,
                $canonicalize,
                $ignoreCase
            )
        );

        static::assertThat($actual, $constraint, $message);
    }
<?php
...
    public static function lessThan($value): LessThan
    {
        return new LessThan($value);
    }

    public static function lessThanOrEqual($value): LogicalOr
    {
        return static::logicalOr(
            new IsEqual($value),
            new LessThan($value)
        );
    }