2

私はJMockitにまったく慣れていないので、できないこと、またはドキュメントの作成方法がわからないことを行う方法を見つけようとしています。Mockitoではこれに相当するものは非常に簡単です。

インターフェイスによって参照されるインスタンスを返す実際の具象クラスがいくつかあります。例えば:

final IAmAnInterface interf = 
    someRealClass.createMeAnInterfaceInstance(param1, param2, param3)

interf outの実装方法の1つをモックして、特定のことを実行したいのですが、テストケースの後半でのみ使用します。たとえば、使用するインターフェイスではなくクラスを扱っている場合です。

new Mockup<ConcreteClassOfIAmAnInterface>() {
    @Mock
    int someMethod() throws SomeException {
        return 1+2+3+4+5; // my special value
    }
}

someRealClassが何を返すかがわかっている場合は正常に機能しますが、「ConcreteClassOfIAmAnInterface」を「IAmAnInterface」に置き換えると、メソッドはモックされません。

Mockitoを使用する場合は、次のようにします。

final IAmAnInterface mock = spy(interf);
when(mock.someMethod()).thenReturn(1+2+3+4+5);

JMockitでこれを行うための良い方法/方法はありますか?

4

1 に答える 1

4

「JMockit Mockups」API を使用しようとしていましたが、これは典型的なモック API とは大きく異なります。

代わりに、より使い慣れた「JMockit Expectations & Verifications」API を使用します。

@Test // note the "mock parameter" below (or declare a mock field)
public void regularTest(@Mocked final IAmAnInterface mock)
{
    // Record expectations if/as needed:
    new NonStrictExpectations() {{
        mock.someMethod(); result = 123;
    }};

    // Use the mock object in the SUT.
    ...

    // Verify expectations if/as needed:
    new Verifications() {{ mock.doSomething(); }};
}

@Test // this is the equivalent to a Mockito "spy"
public void testUsingPartialMocking()
{
   final IAmAnInterface realObject = new SomeImplementation();

   new NonStrictExpectations(realObject) {{
      // Record zero or more expectations.
      // Calls to "realObject" *not* recorded here will execute real code.
   }};

   // call the SUT

   // verify expectations, if any
}
于 2012-08-22T18:07:06.453 に答える