2

次のようなクラスを (JMockit を使用して) テストしたいと思います。

class MyClass extends ComplexParentClass {

    public void testedMethod() {
        ...
    }

    private int complexPrivateMethod() {
        ...
    }

}

クラスチェンジはできません。問題は、ComplexParentClass に複雑なコンストラクターが含まれているため、テストが困難になることです。そこで、親クラスをモックしたいと思います。また、複雑なプライベート メソッドをモックしたいと思います。しかし、そのようなことは可能なのでしょうか?

私は次のことを試しました:

class MyClassTest {

    @Tested
    MyClass myClass;

    // mock the parent
    @Mocked
    ComplexParentClass complexParentClass;

    @Test
    public void test() {
        new Expectations(myClass) {{
            // partially mock the private method
            Deencapsulation.invoke(myClass, "complexPrivateMethod"); result = 0;
        }};

        myClass.testedMethod();
    }

}

ただし、これは「すでに嘲笑された」例外につながります。

これにアプローチする方法を知っている人はいますか?

4

1 に答える 1

2

モックアップを使ってみましたか? このようなものはモックcomplexPrivateMethodのみです:

@Test public void test() {
  new MockUp<ComplexParentClass> () {
    @Mock private int complexPrivateMethod() { return 0; }
  };

  //do something with MyClass
}
于 2015-08-27T15:12:14.530 に答える