【问题标题】:Does JUnit have some weird 30 character length limit on the name of your class?JUnit 是否对您的班级名称有一些奇怪的 30 个字符长度限制?
【发布时间】:2010-11-30 00:50:27
【问题描述】:

我为一些单元测试创​​建了一个类。一切都进行得很顺利,直到我更改了类的名称以匹配我正在测试的以 TestCase 为后缀的类。突然,每次我尝试在 Eclipse 中运行测试用例时,我都会收到“此类型没有输入配置”。

然后有人建议班级名称的长度限制为 30 个字符。我看了一下类名,它有 32 个字符长。然后我从最后删除了两个字符并再次尝试,一切正常。我把它们放回去,它就停止工作了。

对此有解释吗?

编辑:

回应一些cmets。它是 Galileo,使用 Windows XP、JUnit 4.4。

编辑 2:

对不起各位。我想我错了。模式似乎是 JUnit/Eclipse 不喜欢我的类名是 TestCase。一旦我把 TestCase 部分拿走,它就可以工作了。它适用于大量长字符串、短字符串以及介于两者之间的所有内容。该名称可以是 ABCTestCase 之类的任何名称,但由于某种原因不能是 TestCase。

【问题讨论】:

  • 嗯。它是否在 Eclipse 之外运行?也许这是 JUnit Eclipse 插件而不是 JUnit 本身的问题。
  • 刚刚尝试了一个名称为 153 个字符(FQN 为 178 个字符)的类,在 eclipse 中没有问题。
  • 您使用的是什么操作系统?在 Windows 上,最大路径长度为 260,所以如果你有一个深度嵌套的类结构,那可能是个问题:msdn.microsoft.com/en-us/library/…
  • 刚刚用不同的已知限制完成了我的答案,以及关于过程可能超过这些限制的理论。

标签: eclipse junit name-length


【解决方案1】:

我不确定这是否与某种操作系统长度限制有关,而是与:

  • 一些基于类名的硬编码参数化。
  • 或源文件夹有问题。
    确实,您的消息看起来像:

来自QuickTip: JUnit: The input type of the launch configuration does not exist

如果您在 Eclipse IDE 中收到上述错误消息,则在运行测试用例时,只需确保您将测试类作为“eclipse 源文件夹”定义的一部分。

最简单的方法。右键单击文件夹->构建路径->用作源文件夹


可能存在长度限制问题(您可以看到一些项目正在进行重构以“低于文件长度限制”(org.eclipse.jdt.core.tests.performance)。

但这很奇怪,考虑到length limit on Windows are

  • 32767 个字符,用于CreateProcess 函数的最大命令行长度。此限制来自 UNICODE_STRING 结构。 CreateProcess 是创建进程的核心函数,因此如果您直接与 Win32 对话,那么这是您唯一需要担心的限制。但是,如果您通过其他方式到达 CreateProcess,那么您经过的路径可能会有其他限制。
  • 8192 字符命令行长度限制由 CMD.EXE 施加。
  • 2048 长度是由于 ShellExecute/Ex 函数 施加的INTERNET_MAX_URL_LENGTH(大约 2048)命令行长度限制。 (如果您在 Windows 95 上运行,则限制仅为 MAX_PATH。)
  • 32767 个字符,用于环境的最大大小(包括所有变量名和所有值)

可能javac command 的总长度确实超过了这些限制之一,并且无法编译其中一个 JUnit Java 类,这意味着它无法再执行(并触发上述错误留言)

【讨论】:

  • 不可能。如果类名少于 30 个字符而不是超过 30 个字符,则它可以工作。上面的错误是我看到的。但我也做了一个谷歌,链接是我遇到的第一个。它绝对是在构建浴中。
  • @uriDium:好的(我没有立即找到该链接,因为您没有完全复制错误消息)。那么可能是与构建路径相关的一些长度限制?
  • 抱歉确切的消息:(我试图从内存中输入它。似乎是这样。似乎有些人正在处理一个很长的名字。构建路径可能相当在那一点上很长。我会继续调查。
【解决方案2】:

在运行 -> 运行...下检查您的运行配置 您的测试在那里有一个配置。检查“测试类”字段。

【讨论】:

    【解决方案3】:

    默认情况下,我相信 JUnit 运行程序设置为查找 *Test 文件,因此它会过滤掉 TestCase。人们经常使用 *TestCase 作为基类,没有任何自己的测试。不确定这是否是您遇到的问题。如果是这样,它可以在运行器中进行配置。

    【讨论】:

      【解决方案4】:

      原来是因为我在扩展 TestCase,这让 JUnit 运行者认为它仍然是版本 3。即使你告诉它使用版本 4。

      【讨论】:

        猜你喜欢
        • 2022-12-11
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 2012-11-02
        • 1970-01-01
        • 2020-02-05
        • 2021-06-29
        相关资源
        最近更新 更多