在所有JUnit测试开始运行之前定义变量?

时间:2015-12-28 22:00:50

标签: java junit

我想在Junit文件中的所有@Tests之前运行一些代码。此代码将调用TCPServer,获取一些数据,将其转换为可用格式(即字符串),然后我希望测试运行在其上。我可以在每次测试中调用服务器,但经过两次测试后服务器停止响应。我该怎么办呢?这基本上是我到目前为止所做的:

public class Test {
    public Terser getData() throws Exception {
        // Make the connection to PM.service
        TCPServer tc = new TCPServer();
        String [] values = tc.returnData();

        // Make the terser and return it.  
        HapiContext context = new DefaultHapiContext();
        Parser p = context.getGenericParser();
        Message hapiMsg = p.parse(data);
        Terser terser = new Terser(hapiMsg);
        return terser;
    }

    @Test
    public void test_1() throws Exception {
        Terser pcd01 = getData();
        // Do Stuff
    }

    @Test
    public void test_2() throws Exception {
        Terser pcd01 = getData();
        // Do Stuff
    }

    @Test
    public void test_3() throws Exception {
        Terser pcd01 = getData();
        // Do stuff
    }
}

我尝试使用@BeforeClass,但是terser并没有留在范围内。我是一个Java新手,所以任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

您需要将Terser作为班级的一个字段,如下所示:

public class Test {
    static Terser pcd01 = null;
    @BeforeClass
    public static void getData() throws Exception {
        // Make the connection to PM.service
        TCPServer tc = new TCPServer();
        String [] values = tc.returnData();

        // Make the terser and return it.  
        HapiContext context = new DefaultHapiContext();
        Parser p = context.getGenericParser();
        Message hapiMsg = p.parse(data);
        pcd01 = new Terser(hapiMsg);
    }
    @Test
    public void test_1() throws Exception {
        // Do stuff with pcd01
    }

    @Test
    public void test_2() throws Exception {
        // Do stuff with pcd01
    }

    @Test
    public void test_3() throws Exception {
        // Do stuff with pcd01
    }
}

在此设置中,getData仅在所有测试之前运行一次,并按指定的方式初始化您的Terser pcd01。然后,您可以在每个测试中使用pcd01,因为字段范围使它们可用于类中的所有方法。