1

JUnit テストを作成して、一部のクラスが (別のクラスの) 特定のメソッド セットを使用していないことを確認したいと考えています。例

class MyClass
{
   void myMethod()
   {
       otherClass.otherClassStaticMethod();
   }
}

class myTest
{
    void test()
    {
        assertFalse(CalledMethods.getMethodsCalledBy("myClass.myMethod").Contains("otherClass.otherClassStaticMethod"));
    }
}

このテストでは、myMethod が otherClassStaticMethod を呼び出さないことを保証したいと思います。コンパイル時にメソッド内で呼び出されているメソッドを見つけるにはどうすればよいですか (リフレクションを使用して呼び出されたメソッドを無視します)。.java パーサーについて考えましたが、お勧めはありますか?

4

2 に答える 2

2

「otherClass」をモックして、メソッドが呼び出されていないことを確認できます。たとえば、Mockitoを使用すると、呼び出されるメソッドの順序を指定したり(インスタンスがモックであるという条件の下で)、呼び出しを許可されていないメソッドを指定したりすることもできます。

coding.mofが言ったように、静的メソッドをモックするには、PowerMock/PowerMockitoを使用する必要があります。

例:

PowerMockito.mockStatic(OtherClass.class);

PowerMockito.verifyStatic(never());
OtherClass.otherClassStaticMethod();
于 2012-07-30T13:05:01.247 に答える
1

モック ライブラリを使用して、それですべて処理できるようにする必要があるようです。私が選んだライブラリとして JMock をお勧めします。インスタンスメソッドを使用している場合、これはあなたにとって完璧です-例が示すように、それが静的メソッドである場合、PowerMock が機能する可能性があります*1。

JMock を使用すると、次のようになります。

public class MyClass {
    public MyClass(Dependency dependency) {
        this.dependency = dependency;
    }

    void myMethod() {
        dependency.someMethod();
    }
}

@RunWith(JMock.class)
public class MyTest {
    private Mockery context = new Mockery();

    @Test
    public void doesNotCallSomeMethod() {
        Dependency dependency = context.mock(Dependency.class);
        MyClass obj = new MyClass(dependency);

        obj.myMethod();  <--- this will fail fast
    }
}

obj.myMethod を呼び出すと、JMock は、依存関係にメソッドを呼び出す必要があるとは言っていないことを即座に報告します。また、DID が呼び出したメソッドと、渡されたパラメーター (ある場合) も示されます。

*1 静的メソッドは純粋な関数でない限り避けるため、PowerMock は使用しません。

于 2012-07-30T13:07:46.067 に答える