Stubbing не покрывает мой метод в модульном тестировании - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь внедрить модульное тестирование, используя методику окурков. Однако, когда я заглушаю метод, нет покрытия линии тестируемого класса.

Класс обслуживания

@Service
@Slf4j
public class Service {

    @Autowired
    private Client client;

    private String doclinkUrl = "www.website.com"

    public byte[] downloadContent(String objectId) {
        String url = doclinkUrl + "documents/" +objectId + "/binary";
        return client.target(url).request().get(byte[].class);
    }
}

Стабильный класс обслуживания

public class ServiceStub extends Service {

    @Override
    public byte[] downloadContent(String objectId) {
        return "test".getBytes();
    }

}

Тестирование, Класс обслуживания

@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {

    @InjectMocks
    private Service testee;

    @Test
    public void testDownloadContent(){
        testee = new ServiceStub();
        Assert.assertNotNull(testee.downloadContent("objectId"));
    }

}

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Подблокировка в модульном тестировании относится к зависимостям, которые не должны мешать при модульном тестировании компонента.
Действительно, вы хотите выполнить модульное тестирование поведения компонента и смоделировать или заглушить зависимость, которая может иметь побочные эффекты.это.
Здесь вы заглушаете тестируемый класс.Это не имеет никакого смысла.

Однако, когда я заглушаю метод, покрытие строки тестируемого класса отсутствует.

Выполнение теста, в котором используется экземпляр ServiceStub, не распространяетсяс точки зрения юнит-теста, конечно, код Service.

В классе Service зависимость, которую вы хотите изолировать, такова:

@Autowired
private Client client;

Таким образом, вы можете поиздеваться или заглушить ее.

0 голосов
/ 07 марта 2019

Если вы используете пружинную загрузку, вы можете выполнить интеграционное тестирование большей части части и только высмеивать внешние вызовы API, используя @MockBean

@SpringBootTest
@RunWith(SpringRunner.class)
public class ServiceTest {

@Autowired
private Service service;

@MockBean
 private Client client;

@Test
public void testDownloadContent(){

    //given(this.client.ArgumentMatchers.any(url) //addtional matchers).willReturn(//somebytes);
    service = new ServiceStub();
    Assert.assertNotNull(testee.downloadContent("objectId"));
    }

 }
...