我很久以前就使用fitnesse,现在我尝试在Windows 11上再次使用它来测试一些java代码。但我遇到了以下问题:
我创建了一个名为 SlimVarDbl 的固定装置,我可以在 itnesse 的文件夹 C:\Users\Cheng\Documents\Proj\VarianceArithemtic\Java 中看到 SlimVarDbl.class 文件。我确信我可以调用 new SlimVarDbl() 来构造一个实例。
所以我创建了一个测试页面,如下所示:
!define TEST_SYSTEM {slim}
!path C:\Users\Cheng\Documents\Proj\VarianceArithemtic\Java\bin\fitnesse\
!|Slim Var Dbl |
|value tolerance|dev tolerance|comment|
|3E-15 |3E-15 |52-bit |
但是当我尝试运行测试时,错误是:
Could not invoke constructor for SlimVarDbl[0]
就好像fitnesse无法识别类文件一样。
fitnesse-standalone.jar 的版本是 v20230503。我当前的java版本是1.8.0_361。
如果我将 java 版本升级到 jdk 20,在尝试测试页面时出现以下错误:
Test system terminated with exception [fitnesse.testsystems.TestExecutionException: java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release]
这是java版本问题还是其他问题?
错误
Could not invoke constructor for SlimVarDbl[0]
通常是由于Java类是package
的一部分而引起的。如果 Java 类有 package
定义,您需要在 FitNesse 中定义一个 import
表来指示固定装置类可以来自该包,并且 .class
文件必须放置在“路径”下方的目录结构中,与包装相符。
您可以分享
SlimVarDbl
的源类(开始)吗?
这是java版本问题还是其他问题?
是和否。当您尝试使用 JDK 20 时出现的问题是 Java 版本。当您使用 Java 8 时,最初的问题是……其他的问题。
您使用的 Fitnesse 版本取决于已弃用的 SecurityManager 功能。从 Java 18 开始,应用程序只能使用特殊命令行选项运行的功能;请参阅JEP 411:弃用安全管理器以进行删除。
如果您想运行该版本的 Fitnesse,建议使用早期版本的 Java。事实上,Fitnesse 下载页面(当前)显示:
FitNesse 需要 Java 运行时环境 (JRE) 版本 8 或 11。
但是,根据 this issues,Fitnesse 似乎可以在 Java 17 (LTS) 上运行,尽管有一些有关安全管理器弃用的日志消息。 Fitnesse 实际上直到 Java 18 才“崩溃”。\
一般来说,除非您需要非 LTS 版本的 Java 的功能。建议坚持使用 LTS Java 版本。非 LTS Java 版本将在发布 6 个月后终止生命! (最新并不总是最好的。)当前 Java 的 LTS 版本是 8、11 和 17。Java 21(将于今年晚些时候发布)预计也将成为 LTS 版本。
我在java21上也有同样的错误,仍然没有fitnesse版本可以解决这个问题。以下是其 github 中问题的链接:https://github.com/unclebob/fitnesse/issues/1455
解决方法是将
-Djava.security.manager=allow
添加到启动测试的 java 命令中。