我有一个典型的SpringApplication,正在尝试通过MockMvc进行测试。该应用程序包含一些数据库调用和一些thripparty 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
内,因此直到level1之前,我都注入了bean,但在更进一步的级别上,我没有一样。
是设计使然,还是我缺少了什么?我们应该如何测试这样的测试用例?
答案 0 :(得分:0)
实际上,在到处都尝试了一些选项之后,我找到了解决方案。
spring和n
一样,也有一个叫做s
的概念。那解决了我的问题。所以现在我的测试如下所示
@MockBean
这就像一个魅力,我可以在测试中使用完整的依赖注入。