1

次のコードがあります。

public void someMethod() {
     Set<Foo> fooSet = bar.getFoos();

     for(Foo foo: fooSet) {
         foo.doSomething();
     }
}

JMockit を使用してこれをテストしたいのですが、特定のタイプとサイズのコレクションを返す方法がわかりません。

私のコードの次のテストでは、foo のセットに foo を追加しようとすると、ハッシュコードの null ポインター例外がスローされます。

@Test
public void someTestMethod()
{
     new Expectations()
     {
         @Mocked Bar bar;
         @Mocked Foo foo;


         Set<Foo> foos = new HashSet<Foo>();
         foos.add(foo);

         bar.getFoos(); returns(foos);
         foo.doSomething();
     };

     new SomeClass().someMethod();
}

これはどのように行うべきですか?

4

1 に答える 1

3

あなたが何をテストしようとしているのか理解できないので、あなたの質問にどのように答えればよいか正確にはわかりませんが、次のようなものが必要だと思います:

@Test
public void someTestMethod(@Mocked(methods="getFoos")final Bar mockedBar
                           @Mocked(methods="doSomething")final Foo mockedFoo {

   final Set<Foo> foos = new HashSet<Foo>();
   foos.add(new Foo()); 

   new Expectations() {
      {
         mockedBar.getFoos(); returns(foos);
         mockedFoo.doSomething();
      }
   };

   new SomeClass().someMethod();
}

これを使用して、JMockit は呼び出しをモックしgetFoos、 Set を返しfoosます。渡したパラメータを見ると、Bar クラスと Foo クラスの部分的なモックを作成しています (getFoos メソッドと doSomething メソッドの呼び出しのみをモックしています)。また、ブロック内に一連のブレースが欠落していることにも気付きました。new Expectationsこれにより、間違いなく問題が発生する可能性があります。心に留めておかなければならないもう 1 つの問題は、NonStrictExpectations ではなく Expectations を使用すると、Set に複数のオブジェクトを入れるとエラーが発生することfoosですdoSomething。複数のオブジェクトを含むテスト ケースを作成する場合はfoos、NonStrictExpectations を使用するか、minTimes と maxTimes を使用して呼び出し回数の制約を指定できます。

于 2010-06-11T13:42:08.913 に答える