createPartialMock с MocksControl - PullRequest
       16

createPartialMock с MocksControl

3 голосов
/ 27 июня 2011

У меня есть StrictPartialMock (созданный с помощью createStrictPartialMock(class, "method1")). и нормальный mockedObject.

Я хочу проверить, звонит ли method1() StrictPartialMock.method2(), mockedObject.method1(), StrictPartialMock.method3() в таком порядке.

Теперь я прочитал, что могу использовать private IMocksControl ctrl = createStrictControl();, чтобы создать элемент управления, который может проверять порядок вызовов методов между ложными сообщениями, но IMocksControl не поддерживает createPartialMock().

Есть ли способ объединить эти 2 техники?

1 Ответ

0 голосов
/ 27 июня 2011

В настоящее время я решил эту проблему, расширив класс, который я тестирую. Я уже делал это, потому что мой тестируемый класс был abstract, но я думаю, что это возможно, если это не final.

@test
public voide testCase() {
    IMocksControl ctrl = createStrictControl();
    OrderTester mockedOrderTester = ctrl.createMock(OrderTester.class);
    MyObject mockedMyObject = ctrl.createMock(MyObject.class);
    mockedOrderTester.method2()
    expectLastCall();
    mockedMyObject .method1()
    expectLastCall();
    mockedOrderTester.method3()
    expectLastCall();
    ctrl.replay();
    ClassUnderTestExt testClass = new ClassUnderTestExt();
    testClass.ot = mockedOrderTester;
    testClass.mo = mockedMyObject;
    testClass.method1();
    ctrl.verify();
}


class ClassUnderTestExt extends ClassUnderTest<String> {
    public OrderTester ot;
    public MyObject mo;

    @Override
    public void writeOutput(String data) {
    }

    @Override
    public void method2() {
        super.method2();
        ot.method2();
    }

    @Override
    public void method3() {
        super.method3();
        ot.method3();
    }
}

class OrderTester {
    public void method2() {
    }

    public void method3() {
    }
}

Обратите внимание, что вы можете не указывать super.methodX(); для имитации истинного частичного макетирования.

Но это решение далеко от совершенства. Было бы намного меньше работы, если бы это можно было сделать с помощью частичного макета и IMocksControl

...