junit Kotlin是否允许对测试类使用反标记名称?

0dxa2lsx  于 2022-11-11  发布在  Kotlin
关注(0)|答案(2)|浏览(151)

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);
        }
    }
guykilcj

guykilcj1#

反勾号是通用语言语法的一部分:在任何你可以写名字的地方(无论是函数、类、属性、变量还是其他什么),你都可以把它放在反勾号中,并且包括几乎所有的字符(除了换行符或者反勾号本身)。
(The最初的用例可能是为了与具有与Kotlin关键字相同名称的Java方法的互操作性,例如System.out;但它更普遍地有用,如您引用的测试所示。)
它被记录在language grammar本身中--在Identifier的定义中--所以它是语言的一个预定部分,而且不可能消失!
更新:
但是,尽管Kotlin保证 * 支持 * 所有标识符的反勾号,这是否意味着您应该选择需要反勾号的名称? 在大多数情况下,不建议这样做。
您可能会在以下两个主要位置看到它们:

  • Java标准库或其他Java库中的方法、字段和包,它们在Java中有效,但在Kotlin中无效--通常是因为它们在Kotlin中是保留字。 (例如:System.out和Mockito的when方法。) 当然,对于这些方法,反勾是必需的,因为没有其他方法可以从Kotlin访问它们。
  • 单元测试中的方法名,如这个问题所示。 这是一个风格问题。 有些人喜欢长的方法名,带有嵌入的空格和标点符号,用简单的英语描述测试的内容;他们也喜欢那些看起来与被测代码明显不同的测试方法。2 其他人则觉得它们丑陋、笨拙、难以阅读。

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

nom7f22z

nom7f22z2#

Kotlin编码约定指定反勾号仅用于测试:

试验方法名称

在测试中(且仅在测试中),您可以使用方法名称,并将空格括在反勾号中。

相关问题