Подтвердить что ты не робот

Как издеваться над статическим методом от JMockit

У меня есть статический метод, который будет вызываться из тестового метода в классе ниже:

public class MyClass
{
   private static boolean mockMethod( String input )
    {
       boolean value;
       //do something to value
       return value; 
    }

    public static boolean methodToTest()
    {
       boolean getVal = mockMethod( "input" );
       //do something to getVal
       return getVal; 
    }
}

Я хочу написать тестовый пример метода методаToTest, издеваясь над mockMethod. Пробовал, как ниже, и он не дает никакого выхода

@Before
public void init()
{
    Mockit.setUpMock( MyClass.class, MyClassMocked.class );
}

public static class MyClassMocked extends MockUp<MyClass>
{
    @Mock
    private static boolean mockMethod( String input )
    {
        return true;
    }
}

@Test
public void testMethodToTest()
{
    assertTrue( ( MyClass.methodToTest() );
} 
4b9b3361

Ответ 1

Чтобы издеваться над вашим статическим методом:

new MockUp<MyClass>()
{
    @Mock
    boolean mockMethod( String input ) // no access modifier required
    {
        return true; 
    }
};

Ответ 2

Чтобы издеваться над статическим приватным методом:

@Mocked({"mockMethod"})
MyClass myClass;

String result;

@Before
public void init()
{
    new Expectations(myClass)
    {
        {
            invoke(MyClass.class, "mockMethod", anyString);
            returns(result);
        }
    }
}

@Test
public void testMethodToTest()
{
    result = "true"; // Replace result with what you want to test...
    assertTrue( ( MyClass.methodToTest() );
} 

Из JavaDoc:

Объект mockit.Invocations.invoke(класс methodOwner, String methodName, Object... methodArgs)

Задает ожидаемый вызов заданному статическому методу с заданным списком аргументов.