我想在java中测试一堆异步函数。我希望有一个功能,主线程等待所有测试完成。这些函数的方法签名如下所示
public class Callback {
public void onSucess(Result result) {
return result.getLastName();
}
}
public class client{
public static void getLastNameAsync(String firstname, Callback cb);
public static void getLastNameAsync(String middlename, Callback cb);
...................................
...................................
...................................
Imagine there are more functions like this
}
我希望能够按如下方式测试客户端类
public void TestClient(){
Client client = new Client();
client.getLastNameAsync("Brandon", new callback());
client.getLastNameAsync("kyle", new callback());
....................
....................
....................
Imagine I have to test more functions like this
}
countDownLatch似乎是一个解决方案但是我需要知道我调用的方法调用的数量,即使我这样做似乎是一个hacky解决方案,因为我需要实例化如下
CountDownLatch latch = new CountDownLatch(#number of methods calls in my TestClient);
The trick again here is knowing #number of methods calls in my TestClient
对任何建议或解决方案持开放态度。
答案 0 :(得分:4)
静态方法不是你的朋友。我将使用实例类,然后使用Executor作为控制执行是同步还是异步的方法。
对于您的生产代码,请注入一个ThreadPoolExecutor,以便您的逻辑推迟到另一个线程(或多个线程)。但是,在您的测试用例中,使用DirectExecutor在同一个线程中执行逻辑。请参阅java.util.concurrent.Executor的javadoc
这样,您的测试代码就会简单得多。我确定你想测试被调用的逻辑。如果您需要测试它的多线程,那么您也可以开始接近它。但是,如果你不必,那么保持简单将有助于测试。静态方法对此没有帮助。
答案 1 :(得分:0)
是的,这是为ConcurrentUnit创建的。