Как смоделировать объект org.springframework.core.io.Resource? - PullRequest
0 голосов
/ 06 ноября 2019

В моем методе обслуживания у меня есть зависимость от ссылки org.springframework.core.io.Resource, и я хочу написать тестовый пример для одного из методов обслуживания с кодом ниже

Код ниже выглядит следующим образом:

@Service
public class EmailServiceImpl implements EmailService{

 @Value("classpath:email_template.html")
 private Resource emailTemplateResource;

 private String getEmailTemplate() {

        String template = null;
        try {
            template = new BufferedReader(new InputStreamReader(emailTemplateResource.getInputStream()))
                    .lines().collect(Collectors.joining("\n"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        return template;
    }

}

Здесь я не могу смоделировать emailTemplateResource объект в моем методе теста. Я пробовал с @Mock и @Spy, но каждый раз я получаю исключение NullPointerException для объекта emailTemplateResource.

Итак, как правильно издеваться над этим emailTemplateResource объектом?

1 Ответ

2 голосов
/ 06 ноября 2019

Вы можете сделать инъекцию конструктора в EmailServiceImpl. Таким образом, в вашем фиктивном классе при создании EmailServiceImpl вы можете передать свой собственный объект Resource в конструкторе.

Сложность этого подхода в том, что @InjectMocks бесполезен, так как сейчас вы создаете свойобъект самостоятельно внутри before крюка контрольного примера.

пример:

@RunWith(MockitoJUnitRunner.class)
public class EmailServiceImplTest{

    EmailServiceImpl  emailServiceImpl ;

    Resource emailTemplateResource;

       @Before
       public void before() {
            emailTemplateResource = //your impl here
           emailServiceImpl  = new EmailServiceImpl(resource);
       }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...