2

私はいくつかの単体テストを書いていますが、私はまだ単体テストに慣れていません。

私が抱えている問題は、保存の多くが
からのユーザー IDを必要とする動作を呼び出すことYii::app()->user->idです。

ただし、UnitTest を実行すると、ユーザーがログインしていないため、問題が発生します。

フラグ(例:)で動作を無視するかif ($isInTestingMode)、テストクラス内でユーザーをログインさせることができますか?

4

2 に答える 2

3

おそらく、テストで使用するユーザー オブジェクトを作成するでしょう。そして、適切なテストで (setupアーニーがコメントで説明しているように、メソッドの一部として)、テスト ユーザー オブジェクトをスワップします。

テスト ユーザー オブジェクトには、次のように機能するメソッドがあります。

public function getId() {
    return 12;
}

public function getIsGuest() {
    return false;
}

上記は、彼らが「フェイク」オブジェクトと呼んでいるものです。

セットアップ方法では、次の行を使用します。

Yii::app()->configure(array(
    'components' => array(
        'user' => array(
            'class' => 'path.to.FakeUser',
        )
    )
));

それをデフォルトのユーザーにしたい場合は、それをテスト構成ファイルに追加することもできます(そして、CWebUser/WebUserログインしていないユーザーが必要なテストで通常のモデルを交換します.

または、各単体テストで FakeUser (isLoggedIn = true/false) にフラグを設定することもできます。私はおそらくこのオプションを自分で使用するでしょう...

于 2013-09-27T18:36:03.297 に答える