我想测试一些依赖网络传输的代码。 该代码发出请求并提供回调-请求完成后,将触发该回调。 我想模拟网络传输,并使用Thread.sleep模拟一些延迟...但是,这当然会使整个测试暂停。

到目前为止,我一直在创建新线程并在整个测试中使用CountDownLatch es来阻止测试在触发回调之前结束。 我的模拟网络对象创建了一个新线程,在该线程上休眠,然后触发回调。 这实际上工作得很好,但是问题在于回调中的任何断言错误都不会报告给原始的junit线程-相反,我在控制台上得到了异常文本,在这里很难理解和使用。

我希望有:

  1. 一种将产生的线程中的assertEquals输出通过管道传递到主JUnit输出收集器的方法,或者
  2. 一种在JUnit中测试线程代码的完全不同且更好的方法,或者
  3. 在单个线程中模拟异步代码的某种方法

感谢您的任何想法!

===============>>#1 票数:4 已采纳

当我必须实现类似于您的异步机制时,我创建了抽象类AsyncTestCase ,该类保留测试错误并提供特殊的方法waitForCallback() 当异步任务在预期结果中发现错误时,会将错误放入此变量中。 设置器在由waitForCallback()使用的对象上调用notify() waitForCallback() 因此,当回调到达时,它将立即导致测试唤醒。 然后,我可以调用所有断言,包括异步任务存储的断言。

并且不要忘记在测试中设置超时以防止它们永远休眠:

@Test(timeout=10000)
public void mytest() {
    callAsyncTask();
    waitForAsyncTask();       // from base class
    assertAsyncTaskResult();  // from base class
}

===============>>#2 票数:1

您要描述的是ConcurrentUnit 这是一个例子:

  final Waiter waiter = new Waiter();

  new Thread(() -> {
    doSomeWork();
    waiter.assertTrue(true);
    waiter.resume();
  }).start();

  // Wait for resume() to be called
  waiter.await(1000);

  ask by Riley Lark translate from so

未解决问题?本站智能推荐:

2回复

如何对使用jUnit简单启动线程的方法进行单元测试?

在标题中,我想测试这样的方法: 编辑:通过评论判断我认为测试线程是否启动并不常见。 所以我要调整问题......如果我的要求是100%的代码覆盖率,我是否需要测试该线程是否启动? 如果是这样,我真的需要一个外部框架吗?
1回复

如何将非并行junit参数化测试转换为并行运行

我写了一个参数化的junit测试。 有没有内置的方法让它并行运行? 任何@annoation例如? 如果没有,我唯一的方法是手动编写 - 你将如何管理junit,java中的线程池?
1回复

Java上用于IntelliJ的多线程测试的工具

我从来没有用Java测试过一个程序,因为其中大多数不是多线程的,现在结果取决于时间和运气 ,这是不好的。 例如,我不希望我的代码在需要时不起作用。 目前,我开发的程序按预期工作,并且由于它是带有线程的并发编程 ,因此我需要像100x一样运行,然后发生随机错误。 我不想让程序进入无限循环
4回复

Android Instrumentation测试 - UI线程问题

我正在尝试为我的Android应用程序编写一个Instrumentation Test。 我遇到了一些奇怪的线程问题,我似乎无法找到解决方案。 我的原始测试: 这导致了一个 android.view.ViewRootImpl $ CalledFromWrongThr
1回复

如何在没有Activity的Android JUnit测试中在UI线程中运行代码?

我有一个依赖AsyncTask来检索数据的数据库组件。 一旦在应用程序中使用它将始终从UI线程调用,但是如何在JUnit测试中执行此操作而不实例化Activity (我只是没有活动,也不应该仅为测试目的创建一个)? runOnUiThread()是一个活动方法,所以它不是一个选项。 有
4回复

使用JUnit测试方法

如何测试此方法:
1回复

使用Junit测试KeyPressed

我在Java中有以下代码: 而且我正在尝试测试KeyPress,但是我不知道如何在测试代码中创建事件或组件。 在我的代码中,我没有任何组件。 我应该在测试代码中创建组件吗? PS:对不起,我的英语。 谢谢
17回复

如何使用JUnit测试依赖于环境变量的代码?

我有一段使用环境变量的Java代码,代码的行为取决于此变量的值。 我想用不同的环境变量值测试此代码。 如何在JUnit中做到这一点? 我已经大致了解了一些在Java中设置环境变量的方法,但是我对它的单元测试方面更感兴趣,尤其是考虑到测试之间不应互相干扰。
1回复

如何使用JUnit测试来测试此类?

我有Java语言的TicTacToe游戏,并且必须为此Game类做Junit测试用例,因为我需要为此应用程序进行突变测试。 谁能帮助我编写好的测试用例。 }
1回复

使用对象夹具进行JUnit测试

大家好,我试图编写一个JUnit测试来测试某些东西,但这并不是单击。 我应该设计一个jUnit测试器,它测试一个类,但是使用另一个将原始类实现为测试夹具的类。 我应该制作一个通用的圆形数组,该数组具有某些处理某些事情的方法,例如添加到数组的前面和后面等。我不确定我是否正确实现了Array