猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

PHPのSlim Framework 3.12で気になったプルリクが...

f:id:yoshiki_utakata:20181113093656p:plain

Slim Frameworkのプルリクエストで気になるのがありました。

github.com

    public function testGetBasePath()
    {
        $this->router->setBasePath('/new/base/path');
        $this->assertFalse(('/not/the/new/base/path' === $this->router->getBasePath()));
        $this->assertEquals('/new/base/path', $this->router->getBasePath());
    }

まあ、別にそんなに気にすることでもないっちゃ無いし、テストとして十分なのですが、気になるポイントが2つあります。

その1

$this->assertEquals('/new/base/path', $this->router->getBasePath());

ここですが、ぺちぱーだとどうしても assertSame を使いたくなるのではないでしょうか。

$this->assertSame('/new/base/path', $this->router->getBasePath());

assertSameassertEqualsには以下の違いがあります。

# このテストは落ちない
$this->assertEquals(1, '1');

# このテストは落ちる
$this->assertSame(1, '1');

そう、assertSameは型まで比較する厳密比較なのです。とはいえ、ここのassertEqualsをassertSameに変えたところで、受ける恩恵はそこまで大きくないのですが、やはりぺちぱーは型に恐怖心を持つべきかなとは思いますので、assertSameが使える場所ではassertSameを使いましょう。どっち使ったらいいかわからないけどassertEqialsってのはやめましょう。

その2

$this->assertFalse(('/not/the/new/base/path' === $this->router->getBasePath()));

これも気になってしまう!

$this->assertNotSame('/not/the/new/base/path', $this->router->getBasePath());

これでいいじゃないかー。意味はどっちも全く同じだし、この場合短いのでどちらでも可読性は変わんないですが、どっちかといえば読みやすいのは下何じゃないかなと思います。===で比較してassertFalseは、どういう場合が通るのか?って一瞬考えてしまいませんかね?

まとめ

別にいいんだけどちょっと気になるプルリクがあったので紹介しました。