java - 如何测试执行另一个可运行的可运行

标签 java multithreading junit

我有一些可运行的文件,其中一个参数是带有taskExecutor的委托(delegate)者来执行另一个可运行的文件:

@Override
public void run() {
    try {
        doTask(messageId);
    } catch (Exception e) {
        count++;
        if (count < 4) {
            delegatedTransactionalAsyncTaskExecutor.execute(this);
        } else {
            delegatedTransactionalAsyncTaskExecutor.execute(getOnExceedErrorTask(messageId));
        }
        throw new RuntimeException(e);
    }
}

我应该如何测试这个?

最佳答案

看起来 delegateTransactionalAsyncTaskExecutor 是您的类中的一个字段。

为了确保可以测试它,您必须使用依赖注入(inject),如下所示:

class UnderTest {
  private final Whatever delegatedTransactionalAsyncTaskExecutor;
  UnderTest(Whatever delegatedTransactionalAsyncTaskExecutor) {
    this.delegatedTransactionalAsyncTaskExecutor = delegatedTransactionalAsyncTaskExecutor;
  ...

现在,您可以使用模拟框架来创建 Whatever 类的对象。模拟允许您指定您期望发生的方法调用;然后,您可以稍后验证这些调用是否确实发生。

换句话说:你准备一个模拟;然后你调用 run() ...然后你检查你正在寻找的那些调用是否确实发生了。当然,为了使整个事情正常进行,您必须能够将这些模拟注入(inject)到您的“被测类”中。

关于java - 如何测试执行另一个可运行的可运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38699436/

相关文章:

java - 获取数组中前 5 个最低值

java - 在 Android 中显示图像网格,网格布局中心为空?

java - 当一个线程到达目的地时,其他线程停止

java - JUnit @RepeatedTest 用于并发执行

java - 为什么 Junit TestRunner 找不到功能?

java - 带有局部变量的 Mockito

java - Android:包含标题和副标题的列表项的默认布局

java - Java并行流每次完成

objective-c - 为什么多线程在此实现中不起作用?

java - 在 JSP 中 session 过期之前显示警告