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 创建了良好的微软件设计,但忽略了宏设计,而宏设计是软件中最重要的部分。