3

私は静的メソッドを持っています。これは複数の場所で使用され、主に静的初期化ブロックで使用されます。Class オブジェクトをパラメーターとして取り、クラスのインスタンスを返します。特定の Class オブジェクトがパラメーターとして使用されている場合にのみ、この静的メソッドをモックしたい。ただし、別の場所から別の Class オブジェクトを使用してメソッドが呼び出されると、null が返されます。
モックされたもの以外のパラメーターの場合、静的メソッドに実際の実装を実行させるにはどうすればよいですか?

class ABC{
    void someMethod(){
        Node impl = ServiceFactory.getImpl(Node.class); //need to mock this call
        impl.xyz();
    }
}

class SomeOtherClass{
    static Line impl = ServiceFactory.getImpl(Line.class); //the mock code below returns null here
}


class TestABC{
    @Mocked ServiceFactory fact;
    @Test
    public void testSomeMethod(){
         new NonStrictExpectations(){
              ServiceFactory.getImpl(Node.class);
              returns(new NodeImpl());
         }
    }
}
4

1 に答える 1

4

必要なのは、「部分モッキング」の形式、特にJMockit API の動的部分モッキングです。

@Test
public void testSomeMethod() {
    new NonStrictExpectations(ServiceFactory.class) {{
        ServiceFactory.getImpl(Node.class); result = new NodeImpl();
    }};

    // Call tested code...
}

記録された期待に一致する呼び出しのみが嘲笑されます。動的にモックされたクラスが呼び出されると、他の人が実際の実装を実行します。

于 2013-04-22T12:08:45.687 に答える