2015-08-20 2 views
1

Я новичок в Junit и Jmockit. Я написал пример и хочу проверить, что с помощью насмешек, но я застрял с ошибкой. Пожалуйста, любезно помогите.Jmockit насмешливый выпуск

public class First { 

    public static int square(int number) { 

     int result = number * number; 
     return result; 
    } 
} 

public class Second { 

    public static void main(String[] args) { 

     int number = 5; 

     number = new Second().xi(number, number); 
     System.out.println(number); 
    } 

    public int xi(int number, int number1) { 
     number = First.square(number) + First.square(number1); 
     return number; 

    } 

} 

public class SecondTest { 

    Second second = new Second(); 

    @Test 
    public void testXi() { 
     new Expectations() { 

      { 

       First.square(5); 
       result = 25; 
      } 

     }; 
     int mk = second.xi(5, 5); 
     assertEquals(50, mk); 
    } 
} 

Когда я попытался запустить этот SecondTest.java тогда я получил следующее сообщение об ошибке.

java.lang.IllegalStateException: Отсутствует вызов для издевающегося типа на этот пункт; убедитесь, что такие вызовы появляются только после объявления подходящего макетного поля или параметра на SecondTest $ 1. (SecondTest.java:17) на SecondTest.testXi (SecondTest.java:12) на sun.reflect.NativeMethodAccessorImpl. invoke0 (родной метод) в java.lang.reflect.Method.invoke (Method.java:606) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java.lang.reflect.Method.invoke (метод. Java: 606) на org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:86) на org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java : 38) по адресу: org.eclipse.jdt.in ternal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:459) на org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:675) на org.eclipse.jdt. internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:382) на org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:192)

Как я new Я не смог найти ошибку в коде. Заранее спасибо

+0

Где вы искали, точно? Документация JMockit (страница «Начало работы», «Учебник», «Документы API») ясно говорит о том, что типы нужно обманывать, используя одну из насмешливых аннотаций, прежде чем вы сможете записать ожидания. Кроме того, это сообщение об ошибке: «... убедитесь, что такие вызовы появляются только после объявления подходящего макетного поля или параметра». –

ответ

1

Вы должны объявить что-то вроде @Mocked First firstInstance в классе испытаний (уровень класса, а не уровень метода).

Тогда вам нужно сделать ожидание firstInstance.square(5); result = 25

Это, в сущности говорит JMockit, что вы хотите, первый класс поругают из, и что он должен обменивать все экземпляры первого класса с экземпляром firstInstance. Затем вы скажете, что вы ожидаете вызова этого экземпляра для метода xi (int, int) со значениями 5, 5, и вы хотите вернуть 25 назад.

+0

, но квадрат - статический метод. – user3718183

+0

Квадрат - статический метод, да. Но xi (int, int) не является. –

+0

Однако я получил эту ошибку, когда я попробовал. mockit.internal.UnexpectedInvocation: Неожиданный вызов: First # квадрат (целое число) с аргументами: 5 \t в First.square (First.java) \t в Second.xi (Second.java:11) – user3718183

Смежные вопросы