2

我正在对 Android 平台的库进行单元测试。我们使用了 JUnit,我们发现异步方法测试存在一些问题。

问题 - 我们在库中有一个用于 ex - Func1() 的方法,它是同步的,它创建一个线程,该线程将与服务器交互并返回一个事件,并且有一个事件侦听器将侦听这些事件。当我针对 Func1() 编写测试时,它会立即返回。但我不确定它是否创建了该线程。

为了解决这个问题,我们尝试了 - Sleep()、CountDownLatch、AsyncTask 和其他......我们没有得到任何结果。

后来发现,TetNG 会支持 Async 方法测试。我将 TestNG 与我的 Eclipse 集成并编写了一个示例测试用例。但是,当我尝试通过执行 -“testcase->右键单击->运行方式->testNG Test”来运行测试用例时,Eclipse 会显示错误消息框 -“无法联系远程 TestNG 客户端。请确保您没有类路径上旧版本的 testng.jar ”。

所以我的问题是——

是否可以使用 TestNG 框架对 Android 应用程序/库进行单元测试?如果是,我们如何实现它?

如果否,是否有任何其他可用的框架比异步方法上的 jUnit WRT 测试更好?

提前致谢。

4

2 回答 2

0

@assylias - 感谢重播。

它显示相同的结果。没有从创建的新线程中获取任何事件。

这就是我所做的。

public void testFunc() throws ... { 
final CountDownLatch done = new CountDownLatch(1);
final Event expected = ABC;

Func(); // which is synchronous and will return immediately; but creates a thread which will do some action  and send an Event.

Listener lst = new Listener() {
    public void handle event(Event e) {
        assertEquals(expected, e);
        done.countdown();
    }
};
done.await();

但是测试用例将等待不确定的时间并且不会生成任何事件。jUnit 会运行子线程还是会在创建时立即终止?

于 2013-09-20T07:22:13.660 回答
0

并且有一个事件监听器会监听这些事件

一旦测试的主线程结束,JUnit 就会停止测试。

你有没有尝试过这样的事情(可能有一些错别字):

final CountDownLatch done = new CountDownLatch(1);
final Event expected = ...

Listener lst = new Listener() {
    public void handle event(Event e) {
        assertEquals(expected, e);
        done.countdown();
    }
};
//register listener and run Func1
assertTrue(done.await(1, SECONDS));

这应该可以在没有任何额外调整的情况下工作(如果没有,那么您的听众可能没有做任何事情 - 但在这种情况下,您将能够验证测试运行了一整秒)。

于 2013-09-19T02:27:00.327 回答