2015-10-19 5 views
1

Я пишу JUnit, и я с помощью @mock и @ injectMock.But, я считаю @injectMocks не работает, когда фасоль весной aop.code так:@injectMocks не работает при использовании Spring AOP

QuestionService.java:

@Component 
public class QuestionService implements IQuestionService{ 
    @Resource 
    private IUserService userService; 
    @Override 
    public User findUserById(long id) { 
    // TODO Auto-generated method stub 
    User user = userService.findUserById(id); 
    return user; 
    } 
} 

Test.java:

@Mock 
IUserService mockuserService; 
@InjectMocks 
@Resource 
QuestionService questionService; 
@Before 
public void setUp() throws Exception { 
    MockitoAnnotations.initMocks(this); 
} 

@Test 
public void testfind() { 
    when(mockuserService.findUserById(1)).thenReturn(
      new User(1, "name")); 
    User user = questionService.findUserById(1); 
    Assert.assertEquals(new User(1, "name"), user); 
} 

Это работает!

Но, когда я добавляю userService весной aop, это не работает!

Например, сделка aop.

Как это исправить?

ответ

0

Почему вы комментируете QuestionService с помощью @Resource в тестовом классе? Вы работаете с SpringJUnit4ClassRunner путем загрузки bean configs? Если не удалите аннотацию @Resource и попробуйте, не имеет значения, использует ли AOP или нет, он должен работать.

И добавить ниже фрагмент кода в @Before метод вашего тестового класса в качестве первой строки.

MockitoAnnotations.initMocks(this); 

@InjectMocks: Отметьте поле, на котором должны быть выполнены для инъекций. MockitoAnnotations.initMocks (this): инициализирует поля, аннотированные аннотациями Mockito.

+0

Да, я запускаю с SpringJUnit4ClassRunner..Если questionService имеет userService, который я хочу издеваться и tagService, который я хочу загрузить весной, как я могу это сделать? – codework

+0

tagService, где он исходит? обновите свой вопрос. – Lovababu

0

Я нашел интересное поведение - как только я использовал AOP около любой метод в классе, mocks перестали работать; вместо этого был инициирован «реальный» компонент, хотя для этого не было никакого кода. Я обнаружил, что если вы будете использовать @MockBean - все будет работать.

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