1

私はユニコードに変換し、ユニコードが機能していることを確認するためにいくつかの単体テストを作成しようとしています。

これが私の現在のコードです。これはmb_detect_encoding()行で失敗し、Unicodeサポートの有効なテストであるかどうかもわかりません。

    function testMultiLingualEncodings(){
        // Create this string via a heredoc.
        $original = '
        A good day, World!
Schönen Tag, Welt!
Une bonne journée, tout le monde!
يوم جيد، العالم
좋은 일, 세계!
Một ngày tốt lành, thế giới!
こんにちは、世界!
'; // Contains international characters from utf-8
        $this->assertTrue(mb_detect_encoding($original, 'UTF-8', true) === true); // Fails regardless of whether strict is true or not.
        $returned = query_item("select :multi limit 10", array(':multi'=>$original)); // Select this exact string, parameterized, from the database
        //debug($returned, string_diff($returned, $original));
        $this->assertTrue((bool)$original); // test original isn't null.
        $this->assertTrue((bool)$returned); // Test returned string isn't null.
        $this->assertTrue($original === $returned); // Test original exactly matches returned string
    }

したがって、mb_detect_encoding()は、上記の最初の文字列がUTF-8ではないことを示しています。また、その文字列をデータベースに渡して取り出し、元の文字列と比較しようとしています。ただし、それがデータベース接続のエンコーディングの有効なテストであるかどうかはわかりません。

それで、一般的に、utf-8サポートの単体テストを作成するにはどうすればよいですか?上記の方法は、その目標を解決するために変更できるものですか?

4

1 に答える 1

3

申し訳ありませんが、それは意味がありません。テストファイルは1つの形式でエンコードされています。テスト文字列に入力したものはすべて、ファイルと同じ方法でエンコードされます。mb_detect_encoding関数にも依存しません。次の文字列を見てみましょう:"abcde"。ASCIIまたはUTF-8にすることができます。特殊文字がないので判断できません。エンコーディングは、データを一時停止する方法です。

//編集

テストを機能させるには$this->assertTrue(mb_detect_encoding($original, 'UTF-8') === 'UTF-8')

于 2012-09-24T22:50:54.853 に答える