Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IDE之外的java连续测试_Java_Junit_Continuous Integration_Continuous Testing_Infinitest - Fatal编程技术网

IDE之外的java连续测试

IDE之外的java连续测试,java,junit,continuous-integration,continuous-testing,infinitest,Java,Junit,Continuous Integration,Continuous Testing,Infinitest,我有很多Java单元测试,我想将一个连续测试框架集成到我的代码库中。理想情况下,我希望编写一个Maven/Ant目标或bash脚本,只要它所监视的文件发生变化,它就会开始运行测试。到目前为止,我已经研究了几个选项(Infinitest、JUnit Max),但它们似乎都希望作为IDE插件运行 我之所以使用仅限CLI的工具,是因为我的同事使用了大量的文本编辑器和IDE,但我想确保任何人都可以不断运行测试 > >编辑:我没有考虑詹金斯或其他更典型的CI解决方案有以下几个原因: 我们已经有了一个C

我有很多Java单元测试,我想将一个连续测试框架集成到我的代码库中。理想情况下,我希望编写一个Maven/Ant目标或bash脚本,只要它所监视的文件发生变化,它就会开始运行测试。到目前为止,我已经研究了几个选项(Infinitest、JUnit Max),但它们似乎都希望作为IDE插件运行

我之所以使用仅限CLI的工具,是因为我的同事使用了大量的文本编辑器和IDE,但我想确保任何人都可以不断运行测试

<> > >编辑:我没有考虑詹金斯或其他更典型的CI解决方案有以下几个原因:

  • 我们已经有了一个CI构建工具,可以在每次推送之后运行单元和集成测试
  • 它们隐藏了测试的运行时(因为它们是异步运行的),允许测试变得越来越慢,而没有人真正注意到
  • 它们通常仅在存储库位于某个中心位置时运行测试。我希望在编辑时运行单元测试,而不是在我已经将代码推送到某个地方之后。我越早运行测试,就越早修复编辑时犯的任何错误。我们的JavaScript团队喜欢类似的工具,引用了3倍于单元测试开发迭代的加速

为什么不使用像Jenkins这样的CI工具对每个代码更改运行测试,作为整个CI构建的一部分?很容易让Jenkins轮询您的源代码管理系统,并在文件更改时运行构建或单独的测试作业。

通常的方法是使用连续集成服务器,例如


让Jenkins每15分钟轮询一次您的版本控制系统,它将在您的项目提交时构建您的项目。您永远都不会忘记您的源代码是否有效。

我建议您使用CI工具,例如,您不仅可以在本地安装,而且,还可以通过一个测试来获得Jenkins云实例,在这个测试中,您可以轻松地测试此解决方案是否能够满足您的目标,而无需在设置过程中花费太多时间

此PaaS提供了一些可用于您自己项目的模板,无论是在本地还是在云上。它将为您生成一个Jenkins作业,该作业已完全设置好并正常工作

您可以查看的一些文章有:

  • 在那里你可以看到你可以得到的仪表板。您将看到每个构建都通过的maven测试,还可以得到一个显示通过、跳过和失败的maven测试的图表
  • 尽管本文专门讨论了iOS,但对于标准JavaMaven项目,您也可以实现相同的目标:测试覆盖率、测试结果、代码复制、代码度量(LOC)

是的,有一个构建服务器(如Bambon、Cruise Control er TeamCity)和一个构建工具(如Maven)(以及用于TestNg/Junit的surefire插件和用于集成测试的Failsafe插件,可能使用Selenium 2)非常流行,因为它的设置相对简单(几乎是开箱即用的)。:)

我正在使用连续轮询目录更改解决方案。(通用代码:(匈牙利语,但源代码为英语))

用于编译基于nanoc的站点的定制解决方案。根据您的需要进行查看和定制。(Groovy)


您打算如何查看测试结果?您不需要仪表板来发现测试失败吗?建议的CI解决方案似乎涵盖了您的需求,因为它可以监视(本地)SCM并显示当前的测试结果。您必须在自己的机器上运行一个私有实例(Jenkins很适合这样做,它非常轻量级,只有一个WAR文件)。当与提供变更挂钩的SCM结合时,您应该会得到您想要的东西。我会让一个进程在后台运行,它会在出现任何测试失败时打印出来。
def job = {
  String  command = /java -jar jruby-nanoc2.jar -S nanoc compile/
  println "Executing "+command
  def proc = command.execute()
  proc.waitForProcessOutput(System.out, System.err)
}

params =  [
  closure: job,
  sleepInterval: 1000,
  dirPath: /R:\java\dev\eclipse_workspaces\project\help\content/
]

import groovy.transform.Canonical;

@Canonical
class AutoRunner{
  def closure
  def sleepInterval = 3000
  // running for 8 hours then stop automatically if checking every 3 seconds
  def nrOfRepeat = 9600 
  def dirPath = "."
  long lastModified = 0

  def autorun(){
    println "Press CTRL+C to stop..."
    println this
    def to_run = {
      while(nrOfRepeat--){
        sleep(sleepInterval)
        if(anyChange()){
          closure()
        }
      }
    } as Runnable
    Thread runner = new Thread(to_run)
    runner.start()
  }

  def boolean anyChange(){
    def max = lastModified
    new File(dirPath).eachFileRecurse {
      if(it.name.endsWith('txt') && it.lastModified() > max){
        max = it.lastModified()
      }
    }
    if(max > lastModified){
      lastModified = max
      return true
    }
    return false;
  }
}

new AutoRunner(params).autorun()