【问题标题】:Junit,Debugging,Sync in Eclipse Oxygen.1a Release (4.7.1a)Eclipse Oxygen.1a 版本 (4.7.1a) 中的 Junit、调试、同步
【发布时间】:2018-10-18 09:51:13
【问题描述】:

假设您有以下课程:

public class A {

public void run() { 
    synchronized(B.class) {
       System.out.println("A: here");       
    }
}
}

public class B {

public void run() {

    synchronized(B.class) {
       System.out.println("B: here");       
    }
}
}

因此,如果 obj a 和 obj b 在同一个 jvm 上运行,则同步块内的代码将被同步。

我想测试同步,所以我有一个用于 A 类和 B 类的 JUnit 测试用例。

我通过 Eclipse 菜单 DebugAs->JUnitTest 在 eclipse 上运行这两个测试用例。

结果是,没有同步。这是因为 Eclipse 会为每个启动的 JUnit 测试用例创建一个新的 JVM 吗?

如果是,有没有办法测试同步?

谢谢你

【问题讨论】:

  • “结果是,没有同步”到底是什么意思?如果输出包含A: hereB: here 以外的行,则混合发生在同步块之后。 (在您的示例中,synchronized(B.class) 仅保证一个或没有线程同时执行两个块的代码。) Run/Debug As JUnit Test 启动一个新的 JVM(请参阅启动配置 JRE 选项卡)。
  • 我在 System.out.println("B: here"); 处有一个断点在 System.out.println("A: here");当我运行两个测试用例时,我可以到达两个断点。
  • 您是通过包含两个测试用例(-> 一个 JVM)的测试套件运行这两个测试用例,还是分别运行两个测试用例(-> 两个 JVM)?
  • 两个测试用例分开。谢谢你的提示。我找到了解决办法

标签: java eclipse debugging junit synchronization


【解决方案1】:

问题在于运行 Testcases seperatley。 有了它,它就起作用了:

@Test
public void test() {
    Class[] cls = {A.class,B.class};
    // Parallel among classes
    JUnitCore.runClasses(ParallelComputer.classes(), cls);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-02
    • 2018-10-10
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    相关资源
    最近更新 更多