Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有任何测试框架或其他方法来测试Java中的异步方法?_Java_Unit Testing_Testng - Fatal编程技术网

是否有任何测试框架或其他方法来测试Java中的异步方法?

是否有任何测试框架或其他方法来测试Java中的异步方法?,java,unit-testing,testng,Java,Unit Testing,Testng,我想测试java中的一系列异步函数。我想要一个主线程等待所有测试完成的功能。这些函数的方法签名如下所示 public class Callback { public void onSucess(Result result) { return result.getLastName(); } } public class client{ public static void getLastNameAsync(String firstname, Callb

我想测试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 latch = new CountDownLatch(#number of methods calls in my TestClient);
The trick again here is knowing #number of methods calls in my TestClient

接受任何建议或解决方案。

静态方法不是你的朋友。我将使用实例类,然后使用执行器作为控制执行是同步还是异步的手段

对于生产代码,注入一个ThreadPoolExecutor,以使逻辑遵从另一个线程(或多个线程)。但是,在您的测试用例中,使用DirectExecutor在同一线程中执行逻辑。请参阅java.util.concurrent.Executor的javadoc


这样,您的测试代码将简单得多。我肯定你想测试被调用的逻辑。如果您需要测试它的多线程性,那么您也可以开始进行测试。但是如果你不必这样做,那么在测试中保持简单会有帮助。静态方法对此没有帮助。

静态方法不是你的朋友。我将使用实例类,然后使用执行器作为控制执行是同步还是异步的手段

对于生产代码,注入一个ThreadPoolExecutor,以使逻辑遵从另一个线程(或多个线程)。但是,在您的测试用例中,使用DirectExecutor在同一线程中执行逻辑。请参阅java.util.concurrent.Executor的javadoc


这样,您的测试代码将简单得多。我肯定你想测试被调用的逻辑。如果您需要测试它的多线程性,那么您也可以开始进行测试。但是如果你不必这样做,那么在测试中保持简单会有帮助。静态方法对此没有帮助。

是的,这就是创建的目的。

是的,这就是创建的目的。

嗨,静态方法只是一个例子。它很可能只是实例方法,事实上我刚刚编辑了上面的示例代码。这里的主要问题是,我希望一个线程执行我所有的异步方法,该线程应该等到所有回调完成执行!我不确定如何使用ThreadpoolExecutor,因为我的异步方法返回类型为void,但不是Future。我不确定我是否理解该注释。执行器的唯一方法是void execute(Runnable-Runnable)。因此,遗嘱执行人并不要求使用未来。假设没有代码,我将不得不假设接受可调用的代码启动它自己的线程。与其这样做,不如使用执行器来执行Runnable(它将包含您想要测试的方法)。关键部分是,在测试期间,使用一个执行器实现,该实现只需在同一线程中调用Runnable.run方法。如果您不需要测试该部分,就不用担心多线程。我已经创建了一些我建议的示例。在这里可以找到它,顺便说一下,首先,非常感谢您的努力!!调用obj.getLastName(“nameToFind”,callback)的线程;将立即返回(甚至在调用您传递的回调之前),因为getLastName是一个异步函数。(我不确定这里是否有,但异步方法应该是这样工作的(非阻塞)。因此,在ClassToTest中@L17我不确定是否100%保证回调将有一个值要检查?我试图指出的一点是getLastName方法在使用默认执行器时只在不同的线程上执行其逻辑。当测试方法注入新的执行器(DirectExecutor的实例)时,DirectExecutor.execute方法调用提供的Runnable的run方法。因此,在测试期间,Runnable将由调用该方法的同一线程执行。在测试中,通过DirectExecutor,回调将作为run()方法的一部分使用。因此,它应该由getLastName方法在测试中完成的时间填充。它很可能只是实例方法,事实上我刚刚编辑了上面的示例代码。这里的主要问题是,我希望一个线程执行我所有的异步方法,该线程应该等到所有回调完成执行!我不确定如何使用ThreadpoolExecutor,因为我的异步方法返回类型为void,但不是Future。我不确定我是否理解该注释。执行器的唯一方法是void execute(Runnable-Runnable)。因此,遗嘱执行人并不要求使用未来。假设没有代码,我将不得不假设接受可调用的代码启动它自己的线程。与其这样做,不如使用执行器来执行Runnable(它将包含您想要测试的方法)。关键部分是,在测试期间,使用一个执行器实现,该实现只需在同一线程中调用Runnable.run方法。如果您不需要测试该部分,就不用担心多线程。我已经创建了一些我建议的示例。在这里可以找到它,顺便说一下,首先,非常感谢您的努力!!调用obj.getLastName(“nameToFind”,callback)的线程;将立即返回(甚至在调用您传递的回调之前),因为getLastName是一个异步函数。(我不确定这里是否有,但异步方法应该是这样工作的(非阻塞)。因此,在ClassToTest中@L17我不确定是否100%保证回调将有一个值要检查?我试图指出的一点是getLastName方法在使用默认执行器时只在不同的线程上执行其逻辑。当测试方法