2

有没有办法创建一个将值返回给另一个方法的 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,并想看看我能把它们推到多远。

谢谢

4

1 回答 1

0

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

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);
}
于 2014-10-14T02:19:27.420 回答