2016-07-31 5 views
0

Так вот мой код:Initialize autowired объектов в блоке TestNG тесты

@Service("MyCode") 
public class CodeImpl implements CodeI { 

    @Autowired 
    private CodeMapper codeMapper; 

    @Autowired 
    private CodeAppService codeAppService; 

    @Override 
    public CodePOJO getCode(String myId) { 
     CodeDTO codeDTO = codeAppService.getOne(myId); 
     return codeMapper.mapCode(codeDTO); 
    } 

} 

И это модульный тест, что я написал:

public class CodeImplTest { 

    @Tested(fullyInitialized = true) 
    CodeImpl codeImpl; 

    @Injectable 
    CodeAppService mockedCodeAppService; 

    @Injectable 
    CodeMapper mockedCodeMapper; 

    @BeforeMethod 
    public void setup_mocks() { 
     codeImpl = new CodeImpl(); 
    } 

    @Test 
    public void testGetCode() throws Exception { 

     final CodeDTO codeDTO = new codeDTO(); 
     codeDTO.setName("my name") 

     new NonStrictExpectations() {{ 
      mockedCodeAppService.getOne(anyString); 
      result = codeDTO; 
     }}; 

     CodePOJO returnedCodePOJO = codeImpl.getCode("1"); 
     assertThat(returnedCodePOJO, is(instanceOf(CodePOJO.class))); 
     assertThat(returnedCodePOJO.getName(), is("my name")); 
    } 

} 

я получаю это следующее неинициализированное исключение:

java.lang.AssertionError: 
     Expected: is "my name" 
     but: was null 

    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20) 
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)  
    at com.dev.impl.CodeImplTest.testGetCode(CodeImplTest.java:74) 

Я попытался найти его на форуме, но не могу ответить на него.

Любая помощь будет оценена по достоинству.

Спасибо.

+0

Попробуйте документацию API для '@ Tested', у него есть ответ. –

+0

Можете ли вы уточнить, пожалуйста? Я пробовал читать столько сообщений и документов, и все же это не работает для меня. Либо я попал в NPE, либо выше исключения. –

+0

Более конкретно, см. Второе предложение второго абзаца в документации по API для '@ Tested':« По умолчанию автоматическое создание происходит непосредственно перед тем, как выполняется тестовый метод, если проверенное поле остается нулевым в такое время; .. . ". –

ответ

1

Вы только подготовили поведение для codeAppService.getOne(), но в вашем коде результат от этого вызова затем передается в codeMapper.mapCode().

Я хотел бы попробовать:

new NonStrictExpectations() {{ 
    mockedCodeAppService.getOne(anyString); 
    result = codeDTO; 
    mockedCodeMapper.mapCode(codeDTO); 
    result = codeDTO; 
}}; 
+0

Мне не нужно иметь второй, потому что это логика поведения, которую я тестирую в своем модульном тесте. –

+0

Как вы определили свой тест, поставив @Tested на класс CodeImpl, то, что вы тестируете, является тот факт, что при вызове getCode («1») вызов codeAppService.getOne (myId); а затем вызов кодаMapper.mapCode (codeDTO); сделано. Поэтому вам нужно второе. Если вы хотите проверить CodeMapper, вам нужно создать новый тест для этого класса. – Alfergon

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

  • Нет связанных вопросов^_^