JUnit和Latches

时间:2018-03-22 07:54:29

标签: java junit concurrency countdownlatch

//按要求改进描述//

代码工作正常,如下所示。但是,如果我将一个断言(Latch)从testA移动到testB;断言失败了。不管我给它多少延迟。

我也做了这个实验:如果我创建一个新的锁存器并让其中一个@Test方法将其计算下来,那么另一个@Test方法看不到倒计时!

@FixMethodOrder没有帮助。

我试图用不同的方法拆分测试,但由于与共享的客户端的连接以及事件序列,我还需要保持一些同步。

谢谢

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class IBClientTest implements XStrategy {

private XBroker broker = new IBXClientC();
private final CountDownLatch connectedClient = new CountDownLatch(1);
private final CountDownLatch receivedTICK = new CountDownLatch(1);


@Test
public void testA() throws InterruptedException {

    broker.connect();
    broker.startStrategy(this);
    assertTrue(connectedClient.await(2, TimeUnit.SECONDS));
    assertTrue(broker.isConnected());

    XInstrument instr1 = XInstrument.fromString("EUR/USD");
    XInstrument instr2 = XInstrument.fromString("GBP/USD");
    Set<XInstrument> set = new HashSet<>();
    set.add(instr2);
    set.add(instr1);
    broker.subscribeToInstruments(set);

    assertTrue(receivedTICK.await(2, TimeUnit.SECONDS));

    broker.disconnect();

}

@Test
public void testB() throws InterruptedException {

}

// invoked by broker
@Override
public void onStart(XBroker broker) {

    connectedClient.countDown();
}

@Override
public void onStop() {
}

// invoked by broker
@Override
public void onTick(XInstrument instrument, XTick tick) {

    receivedTICK.countDown();

}

1 个答案:

答案 0 :(得分:0)

我想我自己找到了答案:

JUnit在测试类的单独实例中运行每个测试。因此,测试之间不共享变量(锁存器)。

  

JUnit旨在通过一系列小型测试获得最佳效果。它在测试类的单独实例中执行每个测试。