绩效衡量

如果需要检查测试方法执行的时间是否太长,可以使用 @Test 注释的超时属性提及预期的执行时间。如果测试执行时间超过该毫秒数,则会导致测试方法失败。

public class StringConcatenationTest {

    private static final int TIMES = 10_000;
    
    // timeout in milliseconds
    @Test(timeout = 20)
    public void testString(){

        String res = "";

        for (int i = 0; i < TIMES; i++) {
            res += i;
        }

        System.out.println(res.length());
    }

    @Test(timeout = 20)
    public void testStringBuilder(){

        StringBuilder res = new StringBuilder();

        for (int i = 0; i < TIMES; i++) {
            res.append(i);
        }

        System.out.println(res.length());
    }

    @Test(timeout = 20)
    public void testStringBuffer(){

        StringBuffer res = new StringBufferr();

        for (int i = 0; i < TIMES; i++) {
            res.append(i);
        }

        System.out.println(res.length());
    }

}

在没有 JVM 热身的大多数情况下 testString 将失败。但是 testStringBuffertestStringBuilder 应该成功通过这个测试。