У меня есть система, которая использует другую систему, и я пытаюсь ее протестировать, но я не хочу постоянно вызывать внешнюю систему.
my system -> my http url -> inside the code i call external system
|
output <- process response <------------
в идеале я хочу подделать / смоделировать данные, чтобы я мне не нужно вызывать внешнюю систему
мой код
class MMarket {
@GetController("/stock/{stock}"
public String loadStockFromYahoo(@PathVariable("stock") String stock) {
LoadStock stockObject = new LoadStock();
String result = stockObject.getYahoo(stock);
return result;
}
}
мой класс, который я хочу высмеять
class LoadStock{
...
public String getYahoo(String stock) {
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject("my url with + stock", String.class);
return result;
}
}
в моем тесте я делаю:
@SpringBootTest
@ExtendWith(MockitoExtension.class) //junit5
@RunWith(JUnitPlatform.class)
class MMarketTest {
@Autowired MMarket mMarket;
@Mock LoadStock loadStock;
@BeforeEach
void setUp() {
when(loadStock.getYahoo(any())).thenReturn("123");
}
@Test
void test1() {
String result = mMarket.loadStockFromYahoo("mystock");
}
}
«Строковый результат» - это результат вызова restTemplate.getForObject, НЕ МОЯ подделка, которая, если я хочу многократно тестировать, вызовет внешнюю систему, которую я не хочу