Spock:测试Groovy类是否具有特定注释?

问题描述 投票:0回答:1

例如,以任何方式测试给定的Groovy类具有批注@Slf4j

这是在TDD上下文中:在看到失败的测试之前,我不想添加注释。

groovy annotations tdd spock
1个回答
0
投票

@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世纪家具制造有关。我知道如何制作家具和鸽子尾巴是最牢固的接头,看起来不错,但非常昂贵。饼干接头是现代的,虽然看起来不太好,但又结实又便宜。因此,根据我的经验,我决定选择鸽子尾巴还是现代饼干接头。

我通常不测试不会引起麻烦的东西。我怎么知道,..很好的经验。只需在类上使用@CompileStatic批注,编译器就会捕获丢失的日志实例,或者只编写测试调用使用记录程序的方法。

在TDD上的一个标记是良好设计的来源:TDD创建了良好的微软件设计,但忽略了宏设计,这是软件最重要的部分。

© www.soinside.com 2019 - 2024. All rights reserved.