0

私はまだ JMockit を学んでおり、それを理解する助けが必要です。

スーパークラス メソッドを使用するクラスをテストしています。私のテストは、struts アクション コンテキストを使用してセッションを取得し、セッションからオブジェクトをプルする内部のコードが原因で、スーパークラス メソッドを使用しようとすると null ポインターを取得します。

保護されたメソッド内のStrutsセッションのものをバイパスしたいメソッド。

public class MyExtendingClass extends MySuperClass{ 
  public void methodIamTesting(){///} 
}

public abstract class MySuperClass{
  //I want to mock this method
  protected Object myProtectedSuperClassMethod(){
// struts action context code that returns an object//}
}

テストコード

@Test
public void testRunsAndDoesntPass() {
Mockit.setUpMock(MySuperClass.class, new MySuperClass(){       
  public Object myProtectedSuperClassMethod() {
      return object;
  }
}); 

// real class method invocation happens
assertEquals(expected, actual);

}

モックを持っていなかった場合と同じように、NullPointers を取得し続けます 次に何を試すかわからない。私が読んだすべてのドキュメントとコード サンプルは、setUpMock でスーパークラス メソッドを public として宣言するだけで、機能するはずです。

それが私がテストしているクラスであるため、クラス全体をモックすることはできません。

4

2 に答える 2

0

MockClass を作成し、setupmock を使用して正しく参照する必要があることがわかりました。

私は本当に JMockit に恋をしています。

@MockClass(realClass = MyExtendingClass.class)
public static class MockSuperClass {
  final Object object = new Object();

  @Mock
  public Object myProtectedSuperClassMethod() {
      return object;
 }}
@Test
public void testRunsAndNowWillPass() {

Mockit.setUpMock(MySuperClass.class, new MockSuperClass(){
public Object myProtectedSuperClassMethod() {
  return object;
}});
// real class method invocation happens where i set expected and actual
assertEquals(expected, actual);
}
于 2012-07-25T17:04:34.593 に答える