加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 功能测试(Jellytools)不在netbeans平台上启动

发布时间:2020-12-15 02:15:35 所属栏目:Java 来源:网络整理
导读:我正在尝试在现有的netbeans应用程序上添加一些功能测试. 有关应用程序的信息:由maven打包,使用netbeans平台7.3.1. 我添加了依赖关系,如何在这个 article中描述但是有异常: Running qa.FuncTestTests run: 1,Failures: 0,Errors: 1,Skipped: 0,Time elapse
我正在尝试在现有的netbeans应用程序上添加一些功能测试.
有关应用程序的信息:由maven打包,使用netbeans平台7.3.1.
我添加了依赖关系,如何在这个 article中描述但是有异常:

Running qa.FuncTest
Tests run: 1,Failures: 0,Errors: 1,Skipped: 0,Time elapsed: 0.067 sec <<< FAILURE! - in qa.FuncTest
org.netbeans.junit.NbModuleSuite$S@67ad77a7(org.netbeans.junit.NbModuleSuite$S)  Time elapsed: 0.066 sec  <<< ERROR!
java.lang.ClassNotFoundException: org.netbeans.Main
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at org.netbeans.junit.NbModuleSuite$S.runInRuntimeContainer(NbModuleSuite.java:819)
    at org.netbeans.junit.NbModuleSuite$S.access$100(NbModuleSuite.java:667)

有人知道它为什么会发生吗?以及如何解决它?
提前致谢.

application / pom.xml中的UPD依赖部分

<dependencies>
    <dependency>
        <groupId>org.netbeans.cluster</groupId>
        <artifactId>platform</artifactId>
        <version>${software.netbeans.version}</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>org.netbeans.api</groupId>
        <artifactId>org-jdesktop-beansbinding</artifactId>
        <version>${software.netbeans.version}</version>
    </dependency>
    <dependency>
        <groupId>org.netbeans.api</groupId>
        <artifactId>org-netbeans-modules-nbjunit</artifactId>
        <version>${software.netbeans.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.netbeans.api</groupId>
        <artifactId>org-netbeans-modules-jellytools-platform</artifactId>
        <version>${software.netbeans.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

UPD1测试类:

package qa;

import junit.framework.Test;
import org.netbeans.jellytools.JellyTestCase;
import org.netbeans.jellytools.OptionsOperator;
import org.netbeans.junit.NbModuleSuite;
import org.openide.windows.TopComponent;

public class FuncTest extends JellyTestCase {

    public static Test suite() {
        return NbModuleSuite.allModules(FuncTest.class);
    }

    public FuncTest(String n) {
        super(n);
    }

    public void testWhatever() throws Exception {
        TopComponent tc = new TopComponent();
        tc.setName("label");
        tc.open();
        OptionsOperator.invoke().selectMiscellaneous();
        Thread.sleep(5000);
        System.err.println("OK.");
    }
}

解决方法

我想分享一下调查结果.我注意到应用程序像往常一样在输出窗口中看到:

Installation            =.../application/target/application/extra
                           .../application/target/application/java
                           .../application/target/application/kws
                           .../application/target/application/platform

但是当通过nbjubit / jellytool启动应用程序时,我只看到:

Installation            =.../application/target/application/platform

所以我决定扩展这个值并调查源代码.让我们考虑一下NbModuleSuite.java中的一些有趣的方法:

private static String[] tokenizePath(String path) {
        List<String> l = new ArrayList<String>();
        StringTokenizer tok = new StringTokenizer(path,":;",true); // NOI18N


    .....
        }

static File findPlatform() {
        String clusterPath = System.getProperty("cluster.path.final"); // NOI18N
        if (clusterPath != null) {
            for (String piece : tokenizePath(clusterPath)) {
                File d = new File(piece);
                if (d.getName().matches("platformd*")) {
                    return d;
                }
            }
        }
        String allClusters = System.getProperty("all.clusters"); // #194794
        if (allClusters != null) {
            File d = new File(allClusters,"platform"); // do not bother with old numbered variants
            if (d.isDirectory()) {
                return d;
            }
        }


    ....
        }

static void findClusters(Collection<File> clusters,List<String> regExps) throws IOException {
        File plat = findPlatform().getCanonicalFile();
        String selectiveClusters = System.getProperty("cluster.path.final"); // NOI18N
        Set<File> path;
        if (selectiveClusters != null) {
            path = new TreeSet<File>();
            for (String p : tokenizePath(selectiveClusters)) {
                File f = new File(p);
                path.add(f.getCanonicalFile());
            }
        } else {
            File parent;
            String allClusters = System.getProperty("all.clusters"); // #194794
            if (allClusters != null) {
                parent = new File(allClusters);
            } else {
                parent = plat.getParentFile();
            }
            path = new TreeSet<File>(Arrays.asList(parent.listFiles()));
        }


....
        }

如您所见,我们可以在cluster.path.final或all.clusters中设置路径值并使用; :作为分界线.我花了一些时间来玩这个常量,并意识到设置没有在pom.xml中设置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${software.maven-surefire-plugin}</version>
    <configuration>
        <skipTests>false</skipTests>
        <systemPropertyVariables>
            <branding.token>${brandingToken}</branding.token>
            <!--problem part start-->
            <property>
                <name>cluster.path.final</name>
                <value>${project.build.directory}/${brandingToken}/platform:${project.build.directory}/${brandingToken}/java:...etc</value>
            </property>
            <!--problem part end-->
        </systemPropertyVariables>
    </configuration>
</plugin>

但这很好用:

<properties>
    <cluster.path.final>${project.build.directory}/${brandingToken}/platform:${project.build.directory}/${brandingToken}/java:...etc</cluster.path.final>
</properties>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${software.maven-surefire-plugin}</version>
    <configuration>
        <skipTests>false</skipTests>
        <systemPropertyVariables>
            <branding.token>${brandingToken}</branding.token>
            <cluster.path.final>${cluster.path.final}</cluster.path.final>
        </systemPropertyVariables>
    </configuration>
</plugin>

我不知道为什么会发生,但我建议使用maven section属性来设置maven-surefire-plugin的systemPropertyVariables.祝好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读