Тестируемый частичный насмешливый класс

Я хочу имитировать статический метод класса поддержки, и для этого мне нужно имитировать метод тестируемого класса с помощью jMockit. В приведенном ниже примере я хочу имитировать метод canContinue, чтобы всегда попадать в условие if. Я также не хочу издеваться над статическим методом и проверять все, что происходит после этого.

public class UnitToTest {

    public void execute() {

        Foo foo = //
        Bar bar = //

        if (canContinue(foo, bar)) {
            Support.runStaticMethod(f);
            // Do other stuff here that I would like to verify 
        }
    }

    public boolean canContinue(Foo f, Bar b) {
        //Logic which returns boolean
    }   
}

Мой метод тестирования выглядит примерно так:

@Test
public void testExecuteMethod() {

    // I would expect any invocations of the canContinue method to 
    // always return true for the duration of the test
    new NonStrictExpectations(classToTest) {{
        invoke(classToTest, "canContinue" , new Foo(), new Bar());
        result = true;
    }};

    // I would assume that all invocations of the static method
    // runStaticMethod return true for the duration of the test
    new NonStrictExpectations(Support.class) {{
        Support.runStaticMethod(new Foo());
        result = true;
    }};

    new UnitToTest().execute();

    //Verify change in state after running execute() method
}

Что я здесь делаю не так? Изменение первого ожидания для метода canContinue для возврата false не влияет на то, происходит ли выполнение кода внутри условия if.


person John    schedule 28.04.2015    source источник


Ответы (1)


Вы издеваетесь над одним экземпляром (classToTest), а затем тренируете другой (new UnitToTest().execute()), который не издевается; это одно не так.

Кроме того, в тесте не следует использовать invoke(..."canContinue"...), поскольку метод canContinue равен public. Но на самом деле над этим методом вообще не стоит издеваться; тест должен подготовить любое необходимое состояние, чтобы canContinue(foo, bar) вернул желаемое значение.

person Rogério    schedule 28.04.2015
comment
если вы замените новые NonStrictExpectations (classToTest) на новые NonStrictExpectations (UnitToTest.class), которые необходимо исправить - person Jorgeejgonzalez; 02.12.2015