2

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

我使用纯 CLI 工具的动机是我的同事使用广泛的文本编辑器和 IDE,但我想确保任何人都可以不断地运行测试。

编辑:出于以下几个原因,我没有考虑 Jenkins 或其他更典型的 CI 解决方案:

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

5 回答 5

1

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

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

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()
于 2014-05-05T11:22:10.113 回答
0

我建议使用Jenkins等 CI 工具,您不仅可以在本地安装,还可以通过PaaS获取 Jenkins 云实例,您可以在其中轻松测试该解决方案是否可以满足您的目标在设置过程中花费太多时间。

此 PaaS 提供了一些ClickStart,您可以将它们用作您自己的项目的模板,无论是在本地还是在云上。它将为您生成一个完全设置和工作的 Jenkins 工作。

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

于 2014-03-24T06:50:46.353 回答
0

是的,拥有构建服务器(如 Bamboo、Cruise Control er TeamCity)和构建工具(如用于 TestNg/Junit 的 surefire-plugin 和用于集成测试的 Failsafe-plugin 可能使用 Selenium 2 之类的东西)非常受欢迎,因为它是设置相对简单(几乎开箱即用)。:)

于 2014-03-24T09:01:37.807 回答
0

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

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

于 2014-03-19T10:58:21.977 回答
0

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

于 2014-03-19T10:57:38.927 回答