Kotlin 是否允许测试类使用反引号名称?

Dav*_*ope 6 junit backticks kotlin

Kotlin/JUnit 宣传使用反引号函数名称进行测试。我发现您还可以使用反引号的类名......

但我找不到任何参考。这是 Kotlin 规范中的某些内容,还是只是一个“可能很快就会消失”的意外功能?

代码示例:

    @Nested
    inner class `when the entity path only specifies one location` {
        @BeforeEach
        fun setup() {
            entity = Entity(
                id = "entityid1",
                name = "entity1",
                type = "type",
                team = TeamColor.BLUE,
                currentLocation = Location(0.0, 10.0, 0.0),
                path = EntityPath(
                    startTime = "00:00:00",
                    timeLocation = listOf(
                        TimeLocation("00:00:00", Location(0.0, 10.0, 0.0)),
                    )
                ),
            )
        }

        @Test
        fun `it returns the first (only) location`() {
            val actualLocation = entityLocator.getEntityLocation(entity, calculation);
            val expectedLocation = Location(0.0, 10.0, 0.0)

            assertEquals(actualLocation, expectedLocation);
        }
    }
Run Code Online (Sandbox Code Playgroud)

gid*_*dds 4

反引号是通用语言语法的一部分:在任何可以编写名称的地方(无论是函数、类、属性、变量还是其他),都可以将其放在反引号中并包含几乎任何字符(换行符或反引号除外)他们自己)。

\n

(最初的用例可能是为了与与 Kotlin 关键字同名的 Java 方法进行互操作,例如System.out; 但它更普遍有用,如您引用的测试所示。)

\n

它记录在语言语法本身 \xe2\x80\x94 的定义中Identifier\xe2\x80\x94 中,因此它是该语言的预期部分,并且不太可能消失!

\n

更新:

\n

但是,尽管 Kotlin 保证支持所有标识符的反引号,但这是否意味着您应该选择需要它们的名称? \xe2\x80\x82 在大多数情况下,不建议这样做。

\n

您可能会看到它们的两个主要地方是:

\n
    \n
  • 来自 Java 标准库或其他 Java 库的方法、字段和包在 Java 中有效,但在 Kotlin 中无效 \xe2\x80\x94 通常是因为它们是 Kotlin 中的保留字。\xe2\x80\x82(例如:System.out和 Mockito 的when方法。)\xe2\x80\x82Backticks 对于这些当然是必要的,因为没有其他方法可以从 Kotlin 访问它们。

    \n
  • \n
  • 单元测试中的方法名称,如本问题所示。\xe2\x80\x82这是一个风格问题。\xe2\x80\x82有些人喜欢嵌入空格和标点符号的长方法名称,它们描述了正在测试的内容简单的英语;他们还喜欢看起来与正在测试的代码明显不同的测试方法。\xe2\x80\x82其他人发现它们丑陋、笨拙且难以阅读。

    正如 gotube 所说,Kotlin 编码约定特别允许测试方法名称带有空格。\xe2\x80\x82 但他们不要求它;如果你愿意,你可以自由地遵循通常的约定。\xe2\x80\x82并且它们只允许使用方法名称,而不是类、对象、包、属性或局部变量的名称\xe2\x80\x94,所以最好坚持所有其他标识符的常用约定,即使在编写测试时也是如此。

    \n
  • \n
\n