Вам нужно будет найти способ издеваться над Slack
, который, к сожалению, кажется одиночным.
Вот что я хотел бы сделать:
1) Сделать Slack
доступным в виде бина, который может быть подключен автоматически:
@Configuration
public class SlackConfiguration {
@Bean
public Slack slack() {
return Slack.getInstance();
}
}
2) Измените свой класс, чтобы взять введенный Slack
:
Обратите внимание, что я полностью угадываю здесь имя, поскольку вы просто показываете метод.Вы бы внедрили объект Slack
, который вы превратили в @Bean
выше, и не использовали бы Slack.getInstance()
непосредственно где-либо еще.
@Component
public class SlackService {
private final Slack slack;
@Autowired
public SlackService(final Slack slack) {
this.slack = slack;
}
public String sendMessage(final Object message) {
final WebhookResponse res = slack.send(url, payload);
// etc
}
}
3) Насмешитесь над объектом Slack
и передайте егок вашему SlackService
в тесте:
Это позволяет вам смоделировать реализацию Slack
, чтобы вы могли изменить ее поведение.Я не буду вдаваться в насмешки в деталях.
public class SlacServiceTest {
private final Slack slack = mock(Slack.class);
private final SlackService serviceUnderTest = new SlackService(slack);
@Test
public void testSomething() {
// TODO: set mock responses here
// Given... when... then...
}
}