WebエンジニアのLoL日記

LoLをプレイしたりLJLの試合を見たりするのが好きなエンジニア。LoLのイベントやパッチノートなど気になった点を記事にしたり、LJLについの記事をかいたりしています。某社でWeb系のエンジニアとして働いているので、技術系の記事もたまに書きます。コンタクトを取りたい場合はtwitterまで。

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は、どういう場合が通るのか?って一瞬考えてしまいませんかね?

まとめ

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