当前位置: 首页 > 知识库问答 >
问题:

Gradle编译但不运行TestNG测试

司空温书
2023-03-14

我们刚刚开始在我们的项目中使用Gradle和TestNG,所以我正在检查失败的任何测试是否真的失败了构建。我很惊讶地看到它没有。测试被正确地拾取和编译,所以我看到了类文件。我也收到了运行报告,但它说0个测试(预计为2个)。运行gradle清洁测试-i给我以下信息:

:contentplatform-service:compileTestJava (Thread[Daemon worker Thread 7,5,main])
 started.
:contentplatform-service:compileTestJava
Executing task ':contentplatform-service:compileTestJava' (up-to-date check took
 0.08 secs) due to:
  Output file D:\Dev\contentplatform-service\build\classes\test has changed.
  Output file D:\Dev\contentplatform-service\build\dependency-cache has changed.

  Output file D:\Dev\contentplatform-service\build\classes\test\nl\xillio\conten
tplatform\service\SuperSimpleTest.class has been removed.
All input files are considered out-of-date for incremental task ':contentplatfor
m-service:compileTestJava'.
Compiling with JDK Java compiler API.
:contentplatform-service:compileTestJava (Thread[Daemon worker Thread 7,5,main])
 completed. Took 0.229 secs.
:contentplatform-service:processTestResources (Thread[Daemon worker Thread 7,5,m
ain]) started.
:contentplatform-service:processTestResources
Skipping task ':contentplatform-service:processTestResources' as it has no sourc
e files.
:contentplatform-service:processTestResources UP-TO-DATE
:contentplatform-service:processTestResources (Thread[Daemon worker Thread 7,5,m
ain]) completed. Took 0.001 secs.
:contentplatform-service:testClasses (Thread[Daemon worker Thread 7,5,main]) sta
rted.
:contentplatform-service:testClasses
Skipping task ':contentplatform-service:testClasses' as it has no actions.
:contentplatform-service:testClasses (Thread[Daemon worker Thread 7,5,main]) com
pleted. Took 0.001 secs.
:contentplatform-service:test (Thread[Daemon worker Thread 7,5,main]) started.
:contentplatform-service:test
Executing task ':contentplatform-service:test' (up-to-date check took 0.049 secs
) due to:
  Output file D:\Dev\contentplatform-service\build\test-results\binary\test has
changed.
  Output file D:\Dev\contentplatform-service\build\test-results has changed.
  Output file D:\Dev\contentplatform-service\build\reports\tests has changed.
Finished generating test XML results (0.0 secs) into: D:\Dev\contentplatform-ser
vice\build\test-results
Generating HTML test report...
Finished generating test html results (0.014 secs) into: D:\Dev\contentplatform-
service\build\reports\tests
:contentplatform-service:test (Thread[Daemon worker Thread 7,5,main]) completed.
 Took 0.194 secs.

SuperSimpleTest.java:

package nl.xillio.contentplatform.service;

import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

@Test
public class SuperSimpleTest {

    @BeforeClass
    public void setUp() {
        // code that will be invoked when this test is instantiated
    }

    @Test
    public void testTest() {
        Assert.assertEquals(true, true);
    }
}

生成.gradle 包含:

test {
    // enable TestNG support (default is JUnit)
    useTestNG()
    scanForTestClasses = false  
    include '**/*'

    testLogging {
        showStandardStreams = true

        // log results to "build/test-results" directory
        exceptionFormat "full"
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
    }
}

我已经看了一下有关此主题的其他问题,在那里我发现了使用scanForTestClasses = false作为解决方法的提示(请参阅 https://issues.gradle.org/browse/GRADLE-1682)。但是,这个问题似乎无关。我在这里犯了其他新手错误吗?如何让超级简单测试只执行?

更新:我试图强迫gradle运行一个特定的测试,结果有一个有趣的错误:gradle抱怨TestNG任务的JUnit版本

共有1个答案

吴丁雷
2023-03-14

这确实是一个愚蠢的新手错误。我们正在使用一个多项目设置,其中包含一个主项目和同一级别的几个文件夹,其中包含代码和测试。我使用的build.gradle意外地将主项目配置为使用TestNG。解决方案是将测试目标包含在allproject子项目闭包中。这里解释一下:allproject和subproject之间有什么区别

下面是正在运行的<code>build.gradle</code>:

def mainClassName = 'nl.xillio.contentplatform.view.Run'


// Load settings for all projects including master and subprojects
allprojects {
    apply plugin: 'java'
    apply plugin: 'eclipse'

    version '0.1'

    repositories {
        mavenCentral()
        maven {
            url 'http://mvnrepository.com/maven2'
        }
        maven {
            url 'http://download.java.net/maven/2'
        }
    }
}

// Load the dependencies for all subprojects (layers)
subprojects {
    dependencies {
    //to do: move these to the correct subprojects
        compile 'javax.inject:javax.inject:1'
        compile 'org.springframework:spring-context:4.1.4.RELEASE'
        compile 'org.springframework:spring-core:4.1.4.RELEASE'
        compile 'org.springframework:spring-beans:4.1.4.RELEASE'
        compile 'commons-logging:commons-logging:1.2'
        testCompile 'org.springframework:spring-test:4.1.4.RELEASE'
        testCompile 'org.testng:testng:6.1.1'
    }

    test {
        // enable TestNG support (default is JUnit)
        useTestNG() 
    }
}

// Resolve the dependencies between the layers in the individual project's build.gradle files
// add ONLY specific per project behaviour of the GLOBAL build here:

project(':contentplatform-web') {
}

project(':contentplatform-service') {
}

project(':contentplatform-dao') {
}

// Return a list of all the external libraries
def getLibraries() {
    return configurations.runtime.filter{!it.name.startsWith('contentplatform')}
}

// Copy all the libraries to a libs folder
task copyLibraries(type: Copy) {
    group 'Content Platform'
    description 'Copy all the external libraries to the /libs folder.'

    destinationDir file('./build/')

    into('libs/') {
        from getLibraries()
    }
}

// Perform the build task before building the big jar
jar {
    group 'Content Platform'
    description 'Package all the layers and dependencies into a big jar.'

    // The libraries are required to build
    dependsOn(copyLibraries)

    // The final big jar needs all the layers
    dependencies {
        compile project(':contentplatform-web'), project(':contentplatform-dao'),
            project(':contentplatform-service'), project(':contentplatform-model')
    }
    // Create a MANIFEST.MF file, the main class file is in the web layer
    manifest {
        attributes 'Implementation-Title': 'Content Platform',  
            'Implementation-Version': version,
            'Built-By': System.getProperty('user.name'),
            'Built-Date': new Date(),
            'Built-JDK': System.getProperty('java.version'),
            'Class-Path': getLibraries().collect{'../libs/' + it.getName()}.join(' '),
            'Main-Class': mainClassName
    }

    // Include the layers in the fat jar
    from(configurations.compile.filter{it.name.startsWith('contentplatform')}.collect{it.isDirectory() ? it : zipTree(it) }) {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }

    // Save the fat jar in the root of the folder instead of in build/libs
    destinationDir file('.')
}
 类似资料:
  • 我们刚刚开始在我们的项目中使用Gradle和TestNG,所以我正在检查失败的任何测试是否真的失败了构建。我很惊讶地看到它没有。测试被正确地拾取和编译,所以我看到了类文件。我也收到了运行报告,但它说0个测试(预计为2个)。运行给我以下信息: SuperSimpleTest.java: 生成.gradle 包含: 我已经看了一下有关此主题的其他问题,在那里我发现了使用作为解决方法的提示(请参阅 ht

  • 我试图在Eclipse中使用Selenium运行TestNG。 当类文件作为TestNG测试运行时,我得到的测试Run=0。 问题会是什么? 我有testNg插件 testng。xml文件: 类: WebDriverTest类: BrowserInstance类: 注: 当我将testing.xml文件作为TestNG Suite运行时,结果是: 当我运行. java文件作为TestNG测试时,结

  • 在我的Gradle项目中,我有一个非常简单的JUnit测试: 当我在IntelliJ中运行测试时,我会得到一个任务列表,其中包含构建成功的消息。例如: 这不应该发生,因为我期待测试失败。我还得到一条消息“测试事件没有收到”。 编辑:添加了项目结构的截图。

  • 问题: TestNG正在运行所有172个测试,但是它只报告了81个测试运行,没有报告一些失败(实际上有两个测试失败,但只报告了一个)。 似乎未报告的测试是有什么方法可以让TestNG正确识别这些测试并正确报告它们的结果吗?

  • 下面的Ant构建编译成功。 它也不在指定的类路径中创建jar文件。 build.xml 编辑:让它运行。没有编辑Build.xml,而是转到,由于某种原因,未选中运行目标。 我检查了它,现在目标运行,但会产生下面的错误日志。 我是否需要对xml文件进行编辑才能运行它并创建一个JAR?