0

userServiceクラスメソッドをテストしていますが、テストしているメソッドが別のメソッドを呼び出しています。

@Test
public void testSomething() {
  HelloWorldResponse hwResponse = ....;

  expect(userDaoMock.helloWorldCall(....).andReturn(hwResponse);

  reploy();

  UserResponseCode response = userService.register(user);

  assertEquals(UserResponseCode.OK, response);
}

ここで、registerメソッドがuserServiceクラスの別のメソッドを呼び出すとしましょう。その呼び出しをどのようにモックできますか?

私が理解していることから、私はuserServiceクラス全体をモックでラップしていないので、それを行うことはできませんか?

アップデート

登録メソッドのjunitテストをデバッグすると、次のように表示されます。

SomeThing thing = helloWorldCall(...);  // userService.helloWorldCall(...);

これで、メソッドhelloWorldCallはuserDaoが返すものを返すだけで、テストでそれをすでにモックアップしていますが、何らかの理由で、実行をトレースするとnullが返されるため、thing==nullになります。

なぜそれはnullなのですか、それは私のモックによって返される値を持つべきではありませんか?

UserService#helloWorldCallコードは以下のとおりです。ここでも、userDaoが返すものを返すだけです。これも、ユニットテストでハードコーディングした応答を返す上記のようにモックアップしています。単体テストをトレース/デバッグするときにnullになるのはなぜですか?

public HelloWordResponse helloWorldCall(...) {
  return userDao.helloWorldCall(..)
}
4

2 に答える 2

0

ここではスコープが強制終了されますが、Springを使用してさまざまなコンテキストで作業することができます。実際のサービスとモックの両方が同じインターフェースを実装します。テストでは、モックを配線し、実行時に実際の実装を配線します。

于 2012-11-10T21:26:16.743 に答える
0

私はモックコントロールを使用しています

private IMocksControl mockMaker;

だから私は使用する必要があります

mockMaker.replay();
mockMaker.verify();

さまざまなモックオブジェクトがあったので、今は機能します。

于 2012-11-26T03:07:18.313 に答える