spring - 如何使用 JUnit MockMVC 测试 Hystrix-Fallback
问题描述
我需要 jUnit 测试方面的帮助,我的结果是 json,我需要测试 Fallback 方法,我得到了我在 Service 的 Update 方法中构建的 RuntimeException。测试不去后备。
控制器.java
private static final Score defaultScore = new Score("Team1", "Team2", 1, 1);
@PutMapping(path = "")
@HystrixCommand(fallbackMethod = "updateScoreFallback")
public ResponseEntity<Score> updateScore(@RequestBody Score score) {
Score s = scoreService.updateScore(score);
return new ResponseEntity<>(s, headers, HttpStatus.OK);
}
public ResponseEntity<Score> updateScoreFallback(Score score) {
return new ResponseEntity<>(defaultScore, headers, HttpStatus.SERVICE_UNAVAILABLE);
}
我的测试
@NoArgsConstructor
@RunWith(SpringRunner.class)
@WebMvcTest(value = ScoreController.class, secure = false)
public class ScoreControllerExceptionTests {
@Autowired
private MockMvc mockMvc;
@MockBean
private ScoreService ScoreService;
private ScoreController ScoreController;
private static final String basePath = "/v1/score";
private static final Score Score = new Score("Team1", "Team2", 1, 1);
private static final String mockScoreJson = "{\"id\":0,\"team_name1\":\"Team1\",\"team_name2\":\"Team2\",\"score_team1\":1,\"score_team2\":1}";
private static final List<Score> scoreList = Collections.singletonList(score);
private static final String mockScoreListJson = "[" + mockScoreJson + "]";
@Before
public void setUp() {
ScoreRepo scoreRepo = new ScoreRepoExceptionStub();
scoreService = new ScoreServiceImpl(scoreRepo);
scoreController = new ScoreController(scoreService);
mockMvc = MockMvcBuilders.standaloneSetup(scoreController).build();
}
@Test
public void updateScoreControllerException() throws Exception{
String result = mockMvc.perform(MockMvcRequestBuilders
.put(basePath)
.accept(MediaType.APPLICATION_JSON)
.content(mockScoreJson)
.contentType(MediaType.APPLICATION_JSON))
.andReturn()
.getResponse()
.getContentAsString();
Assert.assertEquals(mockScoreJson, result, true);
}
....
感谢您的帮助
解决方案
推荐阅读
- javascript - Quasar PWA Workbox 路由排除
- aws-lambda - 响应卡未显示在 website-lex 中
- prometheus - Prometheus 节点导出器未在 Centos 6 上返回指标
- python - ClientError:调用 ListObjects 操作时发生错误 (AccessDenied):访问被拒绝
- python - 列名前点的目的是什么
- gradlew - 优化 gradle wrapper 的安装大小
- kubernetes - Kubernetes 无法从通过 /etc/hosts 指向私有域的私有注册表中提取映像
- php - 如何隐藏身份证号码并在网址中仅保留姓名
- javascript - 在 for 循环中承诺在闭包中访问正确的值
- .net - .NET 标准消息是否与用于通用消息发送的 .NET Framework BrokeredMessages 有效不兼容?