0

コントローラに登録アクションがあるとします。

    [HttpPost]
    public ViewResult Register(string username, string email, string password, string repeatPassword)

このアクションは次のようになります。

  1. パラメータを確認して検証する
  2. 通信し、新しいデータをリポジトリに追加します
  3. ビューを返します。

間違いなくユニットテスト1と3が必要ですが、2はどうですか?リポジトリにaddメソッドを実装せずにテスト2をユニットテストする方法はありますか?

ありがとう、

RWendi

4

2 に答える 2

2

Moqを使用した#2のテストは次のようになります。

[Test]
public void UserIsAddedToRepository()
{
    // arrange
    var username = "user1";
    var email = "email@address";
    var password = "password";
    var controller = new LoginController();
    var mockUserRepo = new Mock<IUserRepo>();
    mockUserRepo.Setup(m => m.AddNewUser(username, email, password));

    // act
    controller.Register(username, email, password, "");

    // assert
    mockUserRepo.Verify(m => m.AddNewUser(username, email, password));
}

MoqのVerifyはNUnitAssertのように動作し、期待されるメソッドが呼び出されない場合はテストに失敗します。

于 2012-08-01T11:57:05.297 に答える
1

番号2をテストするために、モッキングを使用できます。リポジトリをモックして、テストの有効な結果を返すことができます。

モックを手動で実行するか(たとえば、関連するリポジトリ(実またはモック)を使用してアクションメソッドにパラメーターを渡す、または関連するモックオブジェクトを使用してコントローラークラスをインスタンス化するなど)、または次のようなモックライブラリを使用できます。Moq

于 2012-08-01T09:25:14.677 に答える