例如,以任何方式测试给定的Groovy类具有批注@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世纪家具制造有关。我知道如何制作家具和鸽子尾巴是最牢固的接头,看起来不错,但非常昂贵。饼干接头是现代的,虽然看起来不太好,但又结实又便宜。因此,根据我的经验,我决定选择鸽子尾巴还是现代饼干接头。
我通常不测试不会引起麻烦的东西。我怎么知道,..很好的经验。只需在类上使用@CompileStatic
批注,编译器就会捕获丢失的日志实例,或者只编写测试调用使用记录程序的方法。
在TDD上的一个标记是良好设计的来源:TDD创建了良好的微软件设计,但忽略了宏设计,这是软件最重要的部分。