我开发简单的单元测试库,只是为了娱乐和体验。只要我编写单元测试,我就会遵循给定时间或安排动作断言模式。所以我想,不要把这个模式名称写成测试方法体中的单行注释:
@TestClass(enabled = false)
public class DemonstrationTest {
@UnitTest
public void StringBuilderSuccess() throws AssertFailureException{
//Given
String firstTitle = "CosmicWhale";
String secondTitle = "AmbientTurtle";
StringBuilder stringBuilder = new StringBuilder();
String expected = firstTitle + " " + secondTitle;
//When
String actual = stringBuilder.append(firstTitle).append(" ").append(secondTitle).toString();
//Then
btester.framework.Assert.assertEquals(expected, actual);
}
}
我可以创建注释,以遵循这种模式。这更优雅:
@UnitTest
public void StringBuilderSuccess() throws AssertFailureException{
@Given
String firstTitle = "CosmicWhale";
String secondTitle = "AmbientTurtle";
StringBuilder stringBuilder = new StringBuilder();
String expected = firstTitle + " " + secondTitle;
@When
String actual = stringBuilder.append(firstTitle).append(" ").append(secondTitle).toString();
@Then
String localVariable;
btester.framework.Assert.assertEquals(expected, actual);
}
我的问题是,这些注释中的每一个都必须高于某个局部变量。这对@Given和@When注释来说不是问题,但是对于最后的@Then注释来说这是个大问题。我在@Then注释下创建了冗余局部变量,以绕过问题。
问题:是否有机会在代码中的Assert上面放置注释?
每个注释体看起来都是lika:
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.LOCAL_VARIABLE)
public @interface When {
}
我正在使用Java 8。 我将不胜感激任何帮助。
聚苯乙烯。如果您想检查或贡献我的项目,可以找到它here。
答案 0 :(得分:4)
Java 8不允许在语句上编写注释。 它被认为是,但不包括在Java 8中。
这是一些背景知识。
Java 5+允许在声明上编写注释。 Java 8+允许在类型上编写注释。
用于在类型上编写注释的Java 8功能的代码名称为"JSR 308"。 Java 8对Java注释进行了一些其他扩展,例如允许重复注释,以及在类文件中表示局部变量的声明注释。 JSR 308还考虑了其他extensions to annotations,包括annotations on statements。虽然语句上的注释有多个use cases,但最后是JSR 308,因此是Java 8,did not include注释语句功能。
答案 1 :(得分:1)
据我所知:只有在声明方法时才能将注释应用于方法,而不是在被调用时。
我没有看到任何明确使用上述代码的注释。但是,如果你真的想要注释
使用返回非void数据类型的方法包装断言语句。 (可能布尔?)
在上面的实现中,注释将应用于方法的返回值。 (您可以选择使用变量名称存储它)