2013-03-22 7 views
0

Сегодня, работая с Mockito и весной я получил ударил с этим сценарием,тест блока весной с использованием Mockito

public class MyClass { 

    private MyService myService; 

    int doSomethingElse(String str) { 
     ..... 
     myService.doSomething(str); 
     ... 
    } 
} 

public interface MyService { 
    String doSomething(String str); 
} 


public class Class1 { 
    private MyClass myClass; 

    public Stirng methodToBeTested() { 
     myClass.doSomethingElse(".."); 
    } 
} 

public class class1Test { 

    @Mock 
    MyService myService; 

    @Resource 
    @Spy 
    @InjectMocks 
    MyClass myClass; 

    @Resource 
    @InjectMocks 
    Class1 class1; 

    public void setUPTest() { 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void methodToBeTestedTest() { 
     this.setUPTest(); 
      ... 
      class1.methodToBeTested(); 
    } 

} 

Здесь я хочу издеваться «MyService». Но MyService используется в «MyClass» и используется в «Class1».

Я хочу инициализировать «MyClass» и «Class1» с использованием пружины.

Когда я пытаюсь запустить этот тест, я получил следующее исключение

org.mockito.exceptions.base.MockitoException: Не может издеваться/шпион класс $ Proxy79 Mockito не может издеваться/шпионом следующего: - окончательный классы - анонимные классы - примитивные типы

Может ли кто-нибудь помочь мне с этим?

+0

Услуга не используется Class1. Прямой зависимостью Class1 является MyClass. Это класс, который вы должны высмеять, чтобы проверить Class1. Затем, чтобы проверить MyClass, вы бы издевались над MyService. –

+0

Спасибо за ответ. Позвольте мне более подробно рассказать об этом, «MyService» - это внешний веб-сервис, и я хочу издеваться над всеми вызовами этого сервиса, где бы он ни находился в моем проекте. – rahul

ответ

1

Вы тестируете Class1, который имеет только MyClass в качестве зависимости. MyService не относится к этому тесту. Вы должны высмеять MyClass и проверить звонок на doSomethingElse.

Если вы хотите проверить вызов doSomething из MyService, вы должны написать MyClassTest, который издевается зависимость к MyService.

+0

Да, спасибо, я понял. – rahul

+0

Кроме того, исключение, которое вызывается Mockito, не должно происходить с кодом, который вы предоставили. Возможно, если вы можете опубликовать исходный код, мы увидим, что вызывает исключение. –

+0

Я использую весенний MVC в вышеуказанном сценарии. Таким образом, он имеет интерфейс и его интерфейс. Я пробовал издеваться над MyClass в Class1, так как я хотел инициализировать, используя Spring «@InjectMocks» и «@Resource» не работают, когда хранятся на одной переменной. Spring инициализирует сначала использование «@Resource», затем «@InjectMocks» не вводит какие-либо mocks в Class1. Будет ли проблема, если я использую весну с mockito? – rahul

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