JUnit 是不是对您的班级名称有一些奇怪的 30 个字符长度限制?

Posted

技术标签:

【中文标题】JUnit 是不是对您的班级名称有一些奇怪的 30 个字符长度限制?【英文标题】: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/… 刚刚用不同的已知限制完成了我的答案,以及关于过程可能超过这些限制的理论。 【参考方案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。

【讨论】:

以上是关于JUnit 是不是对您的班级名称有一些奇怪的 30 个字符长度限制?的主要内容,如果未能解决你的问题,请参考以下文章

idea评估许可证到期啥意思

遍历数组以返回数组的名称

markdown 这里有一组库,插件和指南,可能对您的Javascript编码有用。

JSONP 对您的 API 来说是必须的吗?

Google Maps API 密钥可能对您的捆绑包 ID 无效

您好,看到您的回答对您非常佩服,同时也有些问题想问一下,关于AIX服务器重启后PING不通也不能telnet。