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

xUnit测试的Gradle脚本什么都不做或抛出执行命令==null

史智志
2023-03-14

我试图创建一个gradle脚本来运行我的xunit测试用例。net项目。脚本如下所示:

task xunitTests {
   String contents = ""
   FileTree tree = fileTree(dir: 'Unit Test', 
   includes: ['**/bin/Debug/**/[Project]*UnitTest.dll'], exclude:['**/bin/Debug/**/*[Project].dll'])
   def reportDir = new File("${buildDir}",'report/xUnit')
   tree.each { path ->
      if (!executedDll.contains(path.name)) {
         def stdout = new ByteArrayOutputStream()
         exec {
            commandLine 'cmd', '/c', 'packages\\xunit.runner.console.2.2.0\\tools\\xunit.console.exe \"$path\" -xml xunit.xml'
            standardOutput = stdout
        }
        executedDll.add(path.name)
        println "Output:\n$stdout"
    } else {
       println "Excluded already executed dll $path.name"
    }
  }
}

在我运行xunitTests任务之后,我得到的输出是任务是最新的,并且构建成功,但在控制台上没有看到任何执行。现在,当我执行以下代码时:

task xunitTests (type:Exec) {
   String contents = ""
   FileTree tree = fileTree(dir: 'Unit Test', 
includes: ['**/bin/Debug/**/[Project]*UnitTest.dll'], exclude:['**/bin/Debug/**/*[Project].dll'])
   def reportDir = new File("${buildDir}",'report/xUnit')
   tree.each { path ->
      if (!executedDll.contains(path.name)) {
        def stdout = new ByteArrayOutputStream()
        commandLine 'cmd', '/c', 'D:\\LIS\\LIS.Encompass\\packages\\xunit.runner.console.2.2.0\\tools\\xunit.console.exe \"$path\" -xml xunit.xml'
        standardOutput = stdout
        executedDll.add(path.name)
        println "Output:\n$stdout"
    } else {
        println "Excluded already executed dll $path.name"
    }
}

我得到的错误是“execCommand==null!”。我错过了什么?我只需要执行测试dll的列表来获得输出xml。

共有1个答案

解鸿运
2023-03-14

不幸的是,这完全不是它的工作方式——请阅读Exec类型的任务是如何工作的<代码>命令行可以在配置时配置一次,下面是一个小示例(我假设您可以将多个路径传递给xunit):

task xunitTests (type:Exec) {
  def paths = []
  def tree = fileTree(dir: 'Unit Test', includes: ['**/bin/Debug/**/[Project]*UnitTest.dll'], exclude:['**/bin/Debug/**/*[Project].dll'])
  def paths = tree.files*.absolutePath
  commandLine 'cmd', '/c', "D:\\LIS\\LIS.Encompass\\packages\\xunit.runner.console.2.2.0\\tools\\xunit.console.exe ${paths.join(' ')} -xml xunit.xml"
}

你可以试试看,可惜我测试不了。

如果可以将多个路径作为参数传递给xunit,则需要创建多个任务和一个根任务(这将取决于所有子任务):

task testAll
def tree = fileTree(dir: 'Unit Test', includes: ['**/bin/Debug/**/[Project]*UnitTest.dll'], exclude:['**/bin/Debug/**/*[Project].dll'])
tree.eachWithIndex { f, idx ->
  task "test$idx"(type: Exec) {
    commandLine 'cmd', '/c', "packages\\xunit.runner.console.2.2.0\\tools\\xunit.console.exe ${f.absolutePath} -xml xunit.xml"
  } 
  testAll.dependsOn "test$idx"
}

现在没有输出重定向,首先要做的事情。

如果对你有帮助,请告诉我。

 类似资料:
  • 我的Gradle项目使用了KotlinDSL和JUnit5/Jupiter(以及Kotlin作为编程语言),Gradle似乎没有正确地接受我的任何测试。当我在命令行上运行Gradle测试时,它告诉我 不管我怎么尝试。然而,在我的IDE中,我可以轻松地运行项目中的每个单个测试类,而不会出现任何问题。

  • 我有一个 xUnit.net 测试,如下所示: VS 2012的xUnit插件表示: 未找到要运行的测试。 TestDriven.net运行良好,但提到了一些关于特设: 1通过,0失败,0跳过(请参阅“任务列表”),这花费了0.47秒(临时) TeamCity、和和Visual Studio也找不到 (我已经安装了,VS看到了一些测试。) 什么原因?

  • 问题内容: 我有一个PHP脚本,需要确定它是通过命令行还是通过HTTP执行的,主要是出于输出格式化的目的。这样做的规范方法是什么?我以为是要检查的,但事实证明,即使使用“ Apache 2.0 Handler”服务器API时,它也已被填充。 问题答案: 使用功能。 以下是文档中的一些相关说明: php_sapi_name —返回Web服务器和PHP之间的接口类型 尽管不完整,但可能的返回值包括ao

  • 问题内容: 我前一段时间读过这篇文章,但似乎找不到。我试图找到一个将在终端中执行命令然后输出结果的命令。 例如:脚本将是: 它将在终端中运行该命令的结果 问题答案: 做这件事有很多种方法: 一种简单的方法是使用os模块: 子流程模块可以实现更复杂的事情:例如:

  • 这是我的第一个JMH基准测试。我可能做错了一切,但是... 我的基准看起来是这样的 是我开始的...等了又等,然后杀了它。我怀疑在< code>@Setup中有问题,所以我简化了它,但是什么都没有改变。这场赛跑开始时相当乐观... 然后什么都没发生。过了很长时间,它继续写下20行像 和5行像 然后它输出一些结果 并更正其估计的eta: 我的是否比我想象的更频繁地被调用,或者还有什么其他原因导致了缓