Инициализация объектов с автопроводкой в ​​модульных тестах 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)

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

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

Благодарю.

1 ответ

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

Я бы попробовал:

new NonStrictExpectations() {{
    mockedCodeAppService.getOne(anyString);
    result = codeDTO;
    mockedCodeMapper.mapCode(codeDTO);
    result = codeDTO;
}};
Другие вопросы по тегам