Junit是针对java的一个单元测试框架。
表示当前的这个方法是一个测试用例
添加依赖:
不需要main方法就能执行,点击类上的运行就是运行所有方法。点击单个方法,就是运行单个方法。
单个方法有错误就会报错。
public class JunitTest {
@Test
void test1(){
System.out.println("这是JunitTest里面的test01");
}
@Test
void test2(){
System.out.println("这是JunitTest里面的test02");
}
@Test
void test3(){
//创建驱动
WebDriver webDriver = new ChromeDriver();
// 打开网页
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#s-top11-left > a:nth-child(6)"));
}
}
忽略测试用例。
public class JunitTest {
@Test
void test1(){
System.out.println("这是JunitTest里面的test01");
}
@Test
void test2(){
System.out.println("这是JunitTest里面的test02");
}
@Disabled
void test3(){
//创建驱动
WebDriver webDriver = new ChromeDriver();
// 打开网页
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#s-top11-left > a:nth-child(6)"));
}
}
public class JunitTest {
@Test
void test1(){
System.out.println("这是JunitTest里面的test01");
}
@Test
void test2(){
System.out.println("这是JunitTest里面的test02");
}
// 在所有测试用例运行之前进行运行,相当于运行class的时候进行运行的,属于类方法。
@BeforeAll
static void SetUp(){
System.out.println("这是我们BeforeAll里面的语句");
}
@AfterAll
static void TearDown(){
System.out.println("这是我们AfterAll里面的语句");
}
}
输出结果
这是我们BeforeAll里面的语句
这是JunitTest里面的test01
这是JunitTest里面的test02
这是我们AfterAll里面的语句
public class JunitTest {
@Test
void test1(){
System.out.println("这是JunitTest里面的test01");
}
@Test
void test2(){
System.out.println("这是JunitTest里面的test02");
}
@BeforeEach
void BeforeEachTest() {
System.out.println("这是BeforeEach里面的语句");
}
@AfterEach
void AfterEachTest() {
System.out.println("这是AfterEach里面的语句");
}
}
执行结果:
这是BeforeEach里面的语句
这是JunitTest里面的test01
这是AfterEach里面的语句
这是BeforeEach里面的语句
这是JunitTest里面的test02
这是AfterEach里面的语句
@Test注解不能用在参数化中,参数化必须使用Parameter注解,使用Parameter注解之前必须引入依赖
添加Parameter依赖:
@ParameterizedTest和@Test不能一起用。
public class JunitTest {
@BeforeEach
void BeforeEachTest() {
System.out.println("这是BeforeEach里面的语句");
}
@AfterEach
void AfterEachTest() {
System.out.println("这是AfterEach里面的语句");
}
@ParameterizedTest
@ValueSource(ints = {1,2,3})//类型的限制~
void test4(int num){
System.out.println(num);
}
@ParameterizedTest
@ValueSource(strings = {"1","2","3"})
void test5(String num){
System.out.println(num);
}
}
传递一行数据,其中用,分割:
public class JunitTest {
@ParameterizedTest
@CsvSource({"1,2,3"})
void test5(String x,String y,String z){
System.out.println(x);
System.out.println(y);
System.out.println(z);
}
}
传递空字符串:
public class JunitTest {
@ParameterizedTest
@CsvSource({"1,2,3,''"})
void test5(String x,String y,String z,String q){
System.out.println(x);
System.out.println(y);
System.out.println(z);
System.out.println(q +"csv");
}
}
从CSV文件中获取参数:
在resources目录下进行创还能CSV文件。
在csv中写入:
张三,李四,王五
张三2,李四2,王五2
张三3,李四3,王五3
必须是csv文件。文件内部必须以,进行分割。
public class JunitTest {
@BeforeEach
void BeforeEachTest() {
System.out.println("这是BeforeEach里面的语句");
}
@AfterEach
void AfterEachTest() {
System.out.println("这是AfterEach里面的语句");
}
@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void test5(String name){
System.out.println(name);
}
}
执行几次取决于csv中有几行。
在CSV文件中写入:
1,张三
2,李四
3,王五
public class JunitTest {
@ParameterizedTest
@CsvFileSource(resources = "test2.csv")
void test5(String id,String name){
System.out.println("学号: " + id +",姓名: " + name);
}
}
public class JunitTest {
@BeforeEach
void BeforeEachTest() {
System.out.println("这是BeforeEach里面的语句");
}
@AfterEach
void AfterEachTest() {
System.out.println("这是AfterEach里面的语句");
}
public static Stream<Arguments> Generator(){
return Stream.of(Arguments.arguments(1,"张三"),
Arguments.arguments(2,"李四"),
Arguments.arguments(3,"王五"));
}
@ParameterizedTest
@MethodSource("Generator")
void test6(int num ,String name){
System.out.println(num + " : "+ name);
}
}
public class JunitTest {
@Test
void Test1(){
System.out.println("这是Test1测试用例");
}
@Test
void Test2(){
System.out.println("这是Test2测试用例");
}
@Test
void A(){
System.out.println("这是TestA测试用例");
}
@Test
void B(){
System.out.println("这是TestB测试用例");
}
}
上面的代码调整位置,无法控制执行顺序。执行顺序是默认的,固定不变动的。
通过TestMethodOrder注解控制执行顺序:
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {
@Order(1)
@Test
void Test1(){
System.out.println("这是Test1测试用例");
}
@Order(2)
@Test
void Test2(){
System.out.println("这是Test2测试用例");
}
@Order(3)
@Test
void A(){
System.out.println("这是TestA测试用例");
}
@Order(4)
@Test
void B(){
System.out.println("这是TestB测试用例");
}
}
随机运行方式:
@TestMethodOrder(MethodOrderer.Random.class)
public class JunitTest {
@Order(1)
@Test
void Test1(){
System.out.println("这是Test1测试用例");
}
@Order(2)
@Test
void Test2(){
System.out.println("这是Test2测试用例");
}
@Order(3)
@Test
void A(){
System.out.println("这是TestA测试用例");
}
@Order(4)
@Test
void B(){
System.out.println("这是TestB测试用例");
}
}
每次的执行顺序不同。
public class JunitTest2 {
@ParameterizedTest
@ValueSource(ints = {1,2,3})
void test5(int num){
System.out.println(num);
Assertions.assertEquals(1,num);//断言相等
}
}
public class JunitTest2 {
@ParameterizedTest
@ValueSource(ints = {1,2,3})
void test5(int num){
System.out.println(num);
Assertions.assertNotEquals(2,num);//断言不相等
}
}
public class JunitTest2 {
@ParameterizedTest
@ValueSource(ints = {1})
void test1(int num){
System.out.println(num);
String str = null;
Assertions.assertNull(str);
}
@ParameterizedTest
@ValueSource(ints = {2})
void test2(int num){
System.out.println(num);
String str = "null";
Assertions.assertNull(str);
}
}
public class JunitTest2 {
@ParameterizedTest
@ValueSource(ints = {1})
void test1(int num){
System.out.println(num);
String str = null;
Assertions.assertNotNull(str);
}
@ParameterizedTest
@ValueSource(ints = {2})
void test2(int num){
System.out.println(num);
String str = "null";
Assertions.assertNotNull(str);
}
}
测试套件需要引入的依赖们:
<dependency>
<groupId>org.junit.jupitergroupId>
<artifactId>junit-jupiter-apiartifactId>
<version>5.9.1version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.junit.jupitergroupId>
<artifactId>junit-jupiter-paramsartifactId>
<version>5.9.1version>
dependency>
<dependency>
<groupId>org.junit.platformgroupId>
<artifactId>junit-platform-suiteartifactId>
<version>1.9.1version>
dependency>
<dependency>
<groupId>org.junit.jupitergroupId>
<artifactId>junit-jupiter-engineartifactId>
<version>5.9.1version>
<scope>testscope>
dependency>
java代码的编写:
@Suite
//依次执行JunitTest和JunitTest1和JunitTest2
@SelectClasses({JunitTest.class, JunitTest1.class,JunitTest2.class})
public class RunSuit {
}
创建两个包,包中写上自动化的方法
package Package1;
import org.junit.jupiter.api.Test;
public class TestDemo1 {
@Test
void test1(){
System.out.println("Package TestDemo1 test1");
}
}
package Package2;
import org.junit.jupiter.api.Test;
public class TestDemo2 {
@Test
void test2(){
System.out.println("Package TestDemo2 test2");
}
}
使用SelectPackages注解来执行包中的代码:
@Suite
@SelectPackages(value = {"Package1","Package2"})
public class RunSuit {
}