タグ

ブックマーク / blog.tojiru.net (3)

  • やり直しC言語:インターポジショニングによるtime(3)のスタブ化

    C言語のを久しぶりに読み返しているのですが、インターポジショニング(interpose, interposition)なる言葉を初めて知ったのでメモです。 「C標準ライブラリ関数などをローカル定義の関数で上書きできてしまう」というお話です。うっかりやらかすとバグの温床になるのですが、うまく使えばユニットテストのスタブとして便利そう。 time関数についておさらい 例として思いついたので、time(3)を上書きしてみます。 time(3)は現在時刻をUNIX time(time_t型)で取得するC標準ライブラリ付属の関数です。詳細はman 3 timeで。この関数、実行時間によって結果が常に異なるわけで、ユニットテストの時は困り者です。 /* time_ex.c */ #include <stdio.h> #include <time.h> int main(void) { printf(

    やり直しC言語:インターポジショニングによるtime(3)のスタブ化
    auient
    auient 2015/09/17
    インターポジショニング(interpose, interposition):C標準ライブラリ関数などをローカル定義の関数で上書きする。/ うまくダイナミックロードするとふつうのコマンドやphpの挙動も変えられる
  • PHPのstream_socket_serverでテスト用HTTPサーバーを作る

    これで何人目か知りませんが、PHP用のライセンスクリーンなオブジェクト指向ベースcURLライブラリが欲しくて車輪の再発明をしました。(結構昔に作ったんですが、書き溜めたスクリプト集を整理しようと思って名前を変えていっています) spindle/httpclient - Packagist spindle/spindle-httpclient - GitHub HTTPのクライアントライブラリなので、ユニットテストするにはHTTP Serverを用意して、実際にリクエストを投げる必要があります。phpunitコマンドを実行すると、その場で適当なテスト用HTTPサーバーを立てて、そこへ向かってテストを実行して、終わったらHTTPサーバーを破棄する。そんな感じにしたいと思いました。 curl_multiによる多重リクエストも試したかったので、PHP5.4以降に組み込まれているビルトインウェブサー

    PHPのstream_socket_serverでテスト用HTTPサーバーを作る
    auient
    auient 2014/09/01
  • newを封印して、JavaScriptでオブジェクト指向する(1)

    以下はプロトタイプ的継承だけで一通りの機能を実現できる、という一つの例です。もちろん他にも書き方はありますし、newを使うのがよくないと主張しているわけではないです。 (誤解を生みそうな文体が混じっているようなので追記: 2011/5/14) 春ですし、少し初心者向けの記事を書きます。タイトル通り、JavaScriptのオブジェクト指向について。ちょっと長くなるので目次です。 クラス(に相当するオブジェクト)を作る オブジェクトからオブジェクトを作る(インスタンス化) 単一継承 多重継承 privateは諦めましょう 親のメソッドを呼ぶ コンストラクタ instanceofに対応する ダックタイピングのススメ JavaScript標準のオブジェクト指向といえばnewやらprototypeやらを書く必要がありますが、これらは書くのが面倒臭い上に気をつけないといけない点がたくさんあります。Ja

    newを封印して、JavaScriptでオブジェクト指向する(1)
  • 1