在IDE之外的java连续测试



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

我使用仅限cli的工具的动机是我的同事使用广泛的文本编辑器和ide,但我想确保任何人都可以经常运行测试。

EDIT:我没有考虑Jenkins或其他更典型的CI解决方案,原因如下:

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

我正在使用连续轮询的目录更改解决方案。(通用代码:http://www.qualityontime.eu/articles/directory-watcher/groovy-poll-watcher/(匈牙利语,但源代码是英语))

编译基于nanoc的站点的定制解决方案。审查和定制您的需要。(Groovy)

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:javadeveclipse_workspacesprojecthelpcontent/
]
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()

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

通常的方法是使用持续集成服务器,如Jenkins。

让Jenkins每15分钟轮询你的版本控制系统,它会在注意到提交时构建你的项目。您将永远不会知道您的源代码是否有效。

我建议使用像Jenkins这样的CI工具,您不仅可以在内部安装,还可以通过PaaS获得Jenkins云实例,在那里您可以轻松测试该解决方案是否可以满足您的目标,而无需在设置过程中花费太多时间。

这个PaaS提供了一些ClickStarts,您可以将其用作您自己项目的模板,在本地或云上。它将生成一个完全设置和工作的Jenkins作业。

你可以看的文章有:

  • 无痛Maven构建与Jenkins在那里你可以看到你可以得到的仪表板。你可以看到每次构建通过的maven测试,你也可以得到一个图表,显示通过、跳过和失败的maven测试。
  • iOS开发者:如何在Jenkins作业中设置质量指标?尽管本文主要讨论的是iOS,但你也可以从标准java maven项目中获得相同的目标:测试覆盖率、测试结果、代码复制、代码度量(LOC)等等。

是的,拥有一个构建服务器(如Bamboo, Cruise Control或TeamCity)和一个构建工具,如Maven(以及用于TestNg/Junit的surefire插件和用于集成测试的failsafe插件,可能使用类似Selenium 2的东西)是相当受欢迎的,因为它的设置相对简单(几乎开箱即用)。:)

相关内容

  • 没有找到相关文章

最新更新