1

我目前正在尝试测试 Eclipse RCP 应用程序的 UI。手动执行时,应用程序启动良好,可以正确使用。但是,当 QF-Test 启动应用程序时,我得到ClassCastException一个 3pp 模块:

java.lang.ClassCastException: java.io.File cannot be cast to java.lang.String
at com.solarmetric.conf.ConfigurationImpl.fromProperties(ConfigurationImpl.java:560)
at com.solarmetric.conf.ConfigurationImpl.loadDefaults(ConfigurationImpl.java:186)

在分析 3pp 库的代码后,我发现尝试将系统的属性值转换为String. 这应该不是问题,因为所有属性值都应该是String(请参阅此答案)。但是,QF-Test 正在添加 3 个属性,它们的值为File( java.io.File) 对象。更确切地说:

jython.home = C:\Program Files\qfs\qftest\qftest-4.2.0\jython
groovy.home = C:\Program Files\qfs\qftest\qftest-4.2.0\groovy
javascript.home = C:\Program Files\qfs\qftest\qftest-4.2.0\javascript

我想删除那些错误的属性值。我已经尝试将它们手动定义为 QF-Test 命令行调用的参数,但没有成功。

一些帮助将不胜感激。

4

2 回答 2

2

QF-Test 的这种行为已通过 QF-Test 4.2.1(2018 年 2 月 26 日发布)修复,请参阅https://www.qfs.de/en/qf-test-manual/lc/manual-en-history。 html#sec_N1D715

Bug fixed:

In a few cases a broken system property set by QF-Test could interfere with SUT startup.

所以答案是简单地更新您的 QF 测试!

于 2018-10-28T08:44:04.397 回答
1

不幸的是,我不知道 QF-Test 的修复方法。如果可能,我建议在使用前更正属性。

    Properties sysProps = System.getProperties();

    Properties copyProps = new Properties();
    synchronized (sysProps) {
        copyProps.putAll(sysProps);
    }

    Set<Entry<Object, Object>> entrySet = copyProps.entrySet();
    for (Entry<Object, Object> entry : entrySet) {
        if (!(entry.getKey() instanceof String) || !(entry.getValue() instanceof String)) {
            sysProps.remove(entry.getKey());
            sysProps.put(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
        }
    }
于 2018-10-26T10:37:08.830 回答