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

时间:2013-09-03 22:19:23

标签: 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,并希望看到我能推动它们到底有多远。

由于

1 个答案:

答案 0 :(得分: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);
}