Hatena::ブログ(Diary)

webネタ

2013-08-23

2013-02-24

2013-01-06

gitignoreで同じ名前だが、片方は無視しない設定

無視したい

cache/

無視したくない

application/view/cache

この場合、以下のようにするといける。


.gitignore

cache/
!application/view/cache

2012-11-25

2012-11-19

phpでprivateも普通に呼べるようにする黒魔術クラス

概要

もちろんUnitTest用に使います。

<?php

/**
 * このクラスに渡したインスタンスはprivateもprotectedもコールできるようになる。
 *
 * @param Class $instance
 * @return AccessibleTransformer
 */
class AccessibleTransformer
{
    public function __construct($instance)
    {
        $this->instance = $instance;
    }

    public function __call($method, $args)
    {
        $method = new ReflectionMethod($this->instance, $method);
        $method->setAccessible(true);
        return $method->invokeArgs($this->instance, $args);
    }
}

使い方

<?php

class Math {
  private function sum($a, $b) { return $a + $b; }
}
$math = new AccessibleTransformer(new Math);
$math->sum(1, 2); // 3

そもそもprivateのテストってどーなん?

phpunitの作者として?有名なSebastianは以下のように言ってるもよう。


http://sebastian-bergmann.de/archives/881-Testing-Your-Privates.html

>I am AGAINST testing private methods and private state.

私はプライベートなメソッドのテストは反対だ。


http://elblinkin.info/2012/02/thoughts-on-accessibility-with-regards-to-testing/

>Just because the testing of protected and private attributes and methods is possible does not mean that this is a “good thing”.

privateとprotectedなメソッドをテストできるのはよくない。


なぜ?

privateは結局他のpublicでたたかれるわけですから。

publicのテストでprivateも網羅できるんじゃないかなと。


しかし

基本的には反対ですが、必要があれば、privateなメソッドもテストしたほうがいいと思うんです。

その場合は、テストにコメントかアノテーション書くとかするといいと思うんです。

phpってdatetime(文字列)でもちゃんと比較できるんですね

$a = '2012-012-31 23:59:59';

$b = '2013-01-02 00:00:00';


var_dump($a < $b); // true

var_dump($a > $b); // false

rsyncって接続先でも使うんですね

bash: rsync: コマンドが見つかりません

rsync: connection unexpectedly closed (0 bytes received so far) [sender]

rsync error: remote command not found (code 127) at io.c(605) [sender=3.0.9]


接続先サーバーのrsyncにパスが通ってない場合、コマンド叩く側からパスを指定してあげる必要がある。

rsync --rsync-path='~/bin/rsync' -av / user@host:~/


rsyncがインストールされてなくて、自分のhomeにいれた場合こうなった。