执行单元测试完成的一些高级操作?

时间:2016-10-13 15:47:40

标签: java unit-testing gradle automation automated-tests

是否可以在单元测试结束时执行某些高级操作?

喜欢抓取所有测试结果和日志并通过电子邮件发送给开发人员吗?

希望在JUnit或Gradle中使用解决方案。

2 个答案:

答案 0 :(得分:1)

JUnit方法可能是实现您自己的RunListener,以便能够获取每个测试的信息。

要调用您的侦听器,您需要通过JUnitCore运行测试。

 public void main(String... args) {
    JUnitCore core= new JUnitCore();
    core.addListener(new MyRunListener());
    core.run(MyTestClass.class);
 }

Gradle方法可能是实现您自己的TestListener,以便能够获取每个测试的信息并发送最终报告。

build.gradle中,您需要添加gradle.addListener(new my.package.MyTestListener())。您的侦听器必须位于构建源目录中,也称为buildSrc

答案 1 :(得分:1)

test.finalizedBy(someHighLevelOperationTask)

示例:以下是一项可以调用gradle emailTestResults的任务,该任务取决于依赖于'zipTestResults'的{​​{1}}。我还没有完成它的电子邮件部分,其中包含一个问题:Sending email using Gradle

所以这只是用test代替电子邮件任务:

println

但如果测试失败,那将无法工作,所以,可能有更好的方法,但你可以添加:

apply plugin: 'java'

task zipTestResults(dependsOn: 'test', type: Zip){
    from 'build/reports/tests'
    baseName 'TestReport'
    destinationDir file('build/reports')
}

task emailTestResults(dependsOn: 'zipTestResults') << {
  println 'Emailing...' + file('build/reports/TestReport.zip')
}

repositories{
    jcenter()
}

dependencies{
    testCompile 'junit:junit:4.12'
}

然后,如果您随后总是想通过电子邮件发送测试结果,请添加:

test.ignoreFailures = true

然后通过电子邮件结果test.finalizedBy(emailTestResults) 完成。