java - 有没有办法覆盖 JUnit 以将响应发送回另一个方法?

标签 java junit jmeter

有什么方法可以创建一个将值返回给另一个方法的 JUnit 测试吗?我意识到它应该是 void 返回类型,但我希望有另一种方法 - 通过 Jmeter,在将 JSON 字符串返回给 JMeter 之前自动运行测试。

    @RequestMapping(value = "/testGetPlayer", produces = "application/json",
        method = RequestMethod.POST)
@ResponseBody
public Response getPlayer(final HttpServletRequest req){
    this.response = new Response();
    String newPlayer = req.getParameter("player");
    this.response = pServ.checkPlayer(newPlayer);   

    if(this.testGetPlayer()){
        System.out.println("woohoo");
    }
    //assert that incoming response string will 
    //contain "created player" or somesuch      
    return response;
}


@Test
public void testGetPlayer(){
    for(String m : response.getMessages()){
        if(m.equals("PLS_M001: Player does not exist")){
            assertTrue(m.equals("PLS_M001: Player does not exist"));
        }
        else{
            assertTrue(m.equals("PLS_M002: Player exists"));
        }
    }
}

我想要这样的东西:

    @Test
public boolean testGetPlayer(){
            boolean allgood = false;

    for(String m : response.getMessages()){
        if(m.equals("PLS_M001: Player does not exist")){
            assertTrue(m.equals("PLS_M001: Player does not exist"));
                            allgood = true;
        }
        else{
            assertTrue(m.equals("PLS_M002: Player exists"));
                            allgood = true;
        }
    }
            return allgood;
}

很抱歉,如果这是一个明显的禁忌,但我仍在学习 Junit 和 Jmeter,想看看我能把它们推进到什么程度。

谢谢

最佳答案

基于预期,断言通常应该用于显示失败的测试。一个测试应该总是期望一个特定的结果,所以理想情况下你当前的测试会变成两个:

testGetPlayerSucceeds() (asserts that player exists after call)
testGetPlayerFails()    (asserts that player does not exist after call)

通常在断言抛出后继续测试是没有意义的,除非断言其他条件,因为您处于未知状态并且测试已经失败。

但是,有时总是有理由做不同的事情,所以...

junit 测试方法是无效的,所以更改签名不太合适。这个想法是一个框架为你运行它们,所以不需要返回类型。如果您不需要使用 junit 框架,您可以删除注释并根据需要调用测试。

我假设您正在尝试通过调用 junit 测试方法来构建测试套件,并且需要对先前测试的结果采取行动...

断言是一种异常,您可以在调用方法中捕获它,设置标志(或采取相应行动),然后重新抛出断言。

Boolean allGood = false;
try {
    testGetPlayer()
} catch (AssertionError a) {
    if (a.getMessage == "PLS_M002: Player exists") allGood = true;
    throw(a);
}

关于java - 有没有办法覆盖 JUnit 以将响应发送回另一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18602415/

相关文章:

java - 仅使用 @Component 和 @Autowired 使用 SpringJUnit4ClassRunner 进行单元测试

java - Junit 动态测试用例从文件中读取数据?

java - Solr 性能基准测试(3.6 版与 5.2 版)

java - 如何设置 AlarmManager 的特定日期、小时、分钟和秒

java - 如何以 JSON 格式发送整数值并在 REST Controller 中接收?

java - 如何在jSTL中编写涉及3个列表的foreach?

java - Jmeter测试在GUI上运行但不在maven上运行

java - PrimeFaces 组件不显示

java - 使用mockito的赋值方法

java - 如何在 jmeter 中生成仪表板报告?