1

下面是我试图afterPropertiesSet在我的 OSGiFramework 类中调用的 jUnit 测试。但不知何故getBundlesInformation,在该流程中不会调用方法。

当我调试我的 jUnit 测试时, afterPropertiesSet 方法被调用,然后它转到 initializeModelFramework 方法,然后它永远不会转到 getBundlesInformation 方法。

@Test
public void testOSGiFramework() {

    Method method;
    try {
        method = OSGiFramework.class.getDeclaredMethod("afterPropertiesSet", null);
        Object o = method.invoke(new OSGiFramework(), null);

        Assert.assertEquals(false, o instanceof Void);
    }
}

以下是 OSGiFramework 类中的方法-

private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

@Override
public void afterPropertiesSet() throws Exception {

    try {
        initializeModelFramework();
    }
}

private void initializeModelFramework() {

    final ScheduledFuture<?> taskHandle = scheduler.scheduleAtFixedRate(
            new Runnable() {
                public void run() {
                    try {
                        getBundlesInformation();
                    }catch(Exception ex) {
                        LOG.log(Level.SEVERE, "Exception in OSGiFramework::initializeModelFramework " +ex);
                        ex.printStackTrace();
                    }
                }
            }, 0, 30, TimeUnit.MINUTES);
}

protected static void getBundlesInformation() throws BundleException, Exception {
    System.out.println("Hello");
}

有谁知道可能是什么问题?

4

2 回答 2

0

那么 getBundlesInformation() 方法正在不同的线程上运行,那么谁能说它在断言方法或测试之后没有运行呢?无论哪种方式,问题似乎都与尝试 Junit 测试线程应用程序有关。

您可能想研究使用不同线程的 Junit 测试。我个人从来没有做过,但是在快速谷歌搜索之后,它似乎不是一个非常简单的任务,并且可能更容易避免它/打破测试,所以他们不必处理不同的线程。

抱歉,如果这个答案没有更多用处 - 如果有经验的人看到这个,请尝试给出更好的答案!

一些快速搜索将我带到:

对多线程应用程序进行单元测试?

线程在 JUnit 中表现异常

祝你好运!

于 2014-06-30T13:36:06.043 回答
0

我认为由于您没有启动线程(Runnable您定义的对象),因此该run方法将永远不会被执行。您必须启动线程run才能执行您的方法。

于 2013-09-05T19:56:52.300 回答