【发布时间】:2020-02-19 18:15:35
【问题描述】:
我有一个典型的 SpringApplication,我正在尝试通过 MockMvc 进行测试。该应用程序包含一些数据库调用和一些第三方 api 调用,我想模拟所有这些,同时测试端到端流程,第三方除外
这是我创建的 -
控制器类
public class PortfolioController {
private final PortfolioService portfolioService;
}
服务类
public class PortfolioService {
private final PortfolioTransactionRepository portfolioTransactionRepository;
private final AlphavantageService alphavantageService;
}
AlphaVantageService
public class AlphavantageService {
private ApiConfig apiConfig;
private final RestTemplate restTemplate;
public Map<String, List<Candle>> getStockQuotes(List<String> symbols) {
return symbols.stream().collect(Collectors.toMap(symbol -> symbol, symbol -> getQuotes(symbol)));
}
}
现在是测试-
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = PortfolioController.class)
class PortfolioControllerTest {
private List<PortfolioTransaction> transactions;
@MockBean
private AlphavantageService alphavantageService;
@MockBean
private PortfolioService portfolioService;
@Autowired
private PortfolioController portfolioController;
@Autowired
private MockMvc mockMvc;
}
问题是,当我尝试在服务器上执行任何 mvc 调用时,AlphaVantageService 没有注入到 PortfolioService 中,所以直到级别 1,我注入了 bean,但在更进一步的级别上,我没有得到相同的结果。
这是设计使然还是我遗漏了什么?我们应该如何测试这样的测试用例?
【问题讨论】: