断言机制,JAVA中的断言机制是一种用于检查程序中某个条件是否为真的机制。它可以在程序运行时检查某个条件是否满足,如果不满足则会抛出AssertionError异常。
在java中,断言机制默认是关闭的。所以会输出u。
断言机制只是为了用来吃调试程序的,切勿将断言写入业务逻辑中。
目标字节码版本(Target Bytecode Version)是指在Java编译过程中,指定生成的字节码文件的版本。Java编译器会将Java源代码编译成字节码文件,然后由Java虚拟机(JVM)来执行这些字节码文件。
在Java中,每个版本的JDK都对应着一种字节码版本。不同的字节码版本可能会引入新的语言特性或优化,同时也可能会不兼容之前的版本。
通过指定目标字节码版本,可以确保编译器生成与指定版本兼容的字节码文件。这样,在运行时,只需要相应版本的JVM即可正确执行字节码文件。
在Java中,可以使用以下命令来指定目标字节码版本:
javac -target <version> <source files>
其中,<version>
可以是以下几个值之一:
- 1.1:Java 1.1
- 1.2:Java 1.2
- 1.3:Java 1.3
- 1.4:Java 1.4
- 1.5:Java 5
- 1.6:Java 6
- 11:Java 11
- 12:Java 12
- 13:Java 13
- 14:Java 14
- 15:Java 15
- 16:Java 16
请注意,目标字节码版本的选择应根据项目的需求和目标平台来确定。
invoke
方法是在代理对象的方法被调用时执行的。在这个例子中,invoke
方法会在用户通过代理对象调用目标对象的方法时执行。
Junit单元测试
Junit的断言机制,是Junit的核心
junit主要是测试方法的,有的方法的健壮性不高 !
有的代码在Junit的单元测试中虽然没有报错,但是代码的逻辑是有错误的,输出的结果和预期的结果不一样!这个时候就可以使用Junit的断言机制了 !
Generate里面有自动生成Junit单元测试的选项 !
TestNG是一个java中的开源自动化测试框架,其灵感来自JUnit和NUnit,TestNG还涵盖了JUnit4整个核心的功能,但引入了一些新的功能,使其功能更强大,使用更方便。
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
TestNG的AfterTest在测试JedisPool的时候不会报错,但是Junit的After和Before是会报错的 !
@BeforeTest
public void setUp(){}
@AfterTest
public void tearDown(){}
2、TestNG常用注解
有必要介绍一下TestNG注解的生命周期,先看一下官网支持的注解有 :
@BeforeSuite 在该套件的所有测试运行之前运行,仅运行一次
@AfterSuite 在该套件的所有测试运行之后运行,仅运行一次
@BeforeTest 注释的方法将在属于test标签内的所有类的所有测试方法运行之前运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次
@AfterTest 注释的方法将在属于test标签内的所有类的所有测试方法运行之后运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次
@BeforeClass 在调用当前类的第一个测试方法之前运行,在当前类中仅运行一次
@AfterClass 在调用当前类的第一个测试方法之后运行,在当前类中仅运行一次
@BeforeGroups 配置方法将在组列表运行之前运行。 此方法保证在调用属于这些组中的任何第一个测试方法之前不久运行
@AfterGroups 此配置方法将在组列表运行之后运行。该方法保证在调用属于这些组的任何最后一个测试方法之后不久运行
@BeforeMethod 注释方法将在当前类中的每个测试方法之前运行
@AfterMethod 注释方法将在当前类中的每个测试方法之后运行
@Parameters 描述如何将参数传递给@Test方法
@DataProvider 标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称
@Listeners 定义测试类上的侦听器
@Factory 将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []
@Test 将类或方法标记为测试的一部分,此标记若放在类上,则该类所有公共方法都将被作为测试方法
注解
使用关键字 enum
定义的枚举类型,在编译期后,会转换成为一个实实在在的类,而在该类中,会存在每个在枚举类型中定义好常量的对应实例对象。
枚举类 ColorEnum 中自定义了一个无参构造方法。创建枚举实例就等同于调用此类的参构造器。
所以,3 个实例,就会调用 3 次构造方法,就会打印 3 次 "构造方法被调用"。
自定义构造方法是否带参数,得看枚举实例,若枚举实例中带参数(见下文),则构造方法中得带参数;否则,就不能带参数
枚举只是一种语法糖,最终会被编译器生成类,而枚举实例会变成静态常量。因此,从某种意义上说,jdk1.5 引入的枚举类型是枚举常量类的代码封装。当用setter() 方法进行修改值的时候,实际上是修改的一个内存中的静态变量的值,这个值原本的意义就被修改了!
枚举类使用了单例模式,保证了每个枚举实例的唯一性,且每个枚举实例都是静态常量。