首页 > 解决方案 > 如何使用 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);
}

....

感谢您的帮助

标签: springspring-mvcspring-boot-testspring-mvc-test

解决方案


推荐阅读