Processing Java Libary在Junit测试中遇见的同步问题

在教人使用Java Processing Libary的过程中,遇见一个小插曲, Boss要求Java程序的Junit测试的Coverage要超过90%, 其实对于这种带GUI的程序是没必要搞这么高的Coverage的, GUI程序的自动化测试还是有很大困难的,但是没办法,只能在Junit中将Processing的GUI程序加载运行起来,跑够Coverage. (就是为了测试而进行测试了).

这里就遇见了两个问题:

1.如何在Junit中启动Java Processing程序.

解决方法:

    @BeforeAll 
    public static void init(){
        app = new App();
        app.noLoop();
        PApplet.runSketch(new String[] { "App" }, app);
        app.setup();
        app.delay(1000);
    }

通过Junit @BeforeAll保证测试Class中只启动一份Application. 

app.noLoop意味不要让Processing按照设定的FPS自动调用draw函数,由于Processing按照FPS自动调用draw会引起一些线程同步问题

2. 线程同步问题

因为Processing的设定fps后,Processing就会定期启动Thread调用PApplet的draw函数,而测试程序会在测试case中修改draw相关的数据(修改显示的数组元素等),导致线程同步错误,出现奇怪的Null Pointer错误.

解决方案就是通过App(PApplet的子类)的noLoop和loop来控制.

     // Do someting...
     // ....
     app.loop(); // 启动Loop,让Processing自动调用draw函数
     app.delay(50); //延时保证自动调用的Draw能进行一次以上
     app.noLoop(); //关闭自动调用Draw
     app.delay(100);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值