Spock:测试 Groovy class 是否有特定注释?
Spock: test that a Groovy class has a certain annotation?
例如,有什么方法可以测试给定的 Groovy class 是否具有注释 @Slf4j?
这是在 TDD 上下文中:在看到失败的测试之前,我不想添加注释。
@Slf4j
注释有 @Retention(SOURCE)
。所以注释信息在运行时是不可用的。这使得测试几乎不可能。您可以阅读源文件并在测试中解析它并检查是否有 @Slf4j
注释。
带有 @Retention(RUNTIME)
的注释会改变图片:
class AnnotationSpec extends Specification{
void "test that class has annotation"() {
given:
def annotation = ShouldHaveAnnotation.class.getAnnotation(ClassAnnotation)
expect:
annotation != null
}
}
@Target([TYPE])
@Retention(RetentionPolicy.RUNTIME)
@interface ClassAnnotation{
}
@ClassAnnotation
class ShouldHaveAnnotation {
}
到目前为止,基于事实的答案。
我对 TDD 的看法:
你的测试用例是什么意思?你只是想盲目地追随 TDD 吗?
每一个所谓的软件工艺工作流程都是基于软件开发与 1800 世纪家具制造相关的假设。
我知道如何制作家具,鸽尾是最坚固的接头,看起来不错,但非常昂贵。饼干店很现代,看起来不太好,但也很结实而且便宜。
所以我根据我的经验决定是选择燕尾还是现代饼干关节。
我通常不测试不会造成麻烦的东西。我怎么知道,..经验丰富。只需在 class 上使用 @CompileStatic
注释,编译器就会捕获丢失的日志实例,或者只编写一个测试来调用使用记录器的方法。
作为良好设计来源的 TDD 的一个标记:TDD 创建了良好的微软件设计,但忽略了宏设计,而宏设计是软件中最重要的部分。
例如,有什么方法可以测试给定的 Groovy class 是否具有注释 @Slf4j?
这是在 TDD 上下文中:在看到失败的测试之前,我不想添加注释。
@Slf4j
注释有 @Retention(SOURCE)
。所以注释信息在运行时是不可用的。这使得测试几乎不可能。您可以阅读源文件并在测试中解析它并检查是否有 @Slf4j
注释。
带有 @Retention(RUNTIME)
的注释会改变图片:
class AnnotationSpec extends Specification{
void "test that class has annotation"() {
given:
def annotation = ShouldHaveAnnotation.class.getAnnotation(ClassAnnotation)
expect:
annotation != null
}
}
@Target([TYPE])
@Retention(RetentionPolicy.RUNTIME)
@interface ClassAnnotation{
}
@ClassAnnotation
class ShouldHaveAnnotation {
}
到目前为止,基于事实的答案。
我对 TDD 的看法:
你的测试用例是什么意思?你只是想盲目地追随 TDD 吗?
每一个所谓的软件工艺工作流程都是基于软件开发与 1800 世纪家具制造相关的假设。 我知道如何制作家具,鸽尾是最坚固的接头,看起来不错,但非常昂贵。饼干店很现代,看起来不太好,但也很结实而且便宜。 所以我根据我的经验决定是选择燕尾还是现代饼干关节。
我通常不测试不会造成麻烦的东西。我怎么知道,..经验丰富。只需在 class 上使用 @CompileStatic
注释,编译器就会捕获丢失的日志实例,或者只编写一个测试来调用使用记录器的方法。
作为良好设计来源的 TDD 的一个标记:TDD 创建了良好的微软件设计,但忽略了宏设计,而宏设计是软件中最重要的部分。