当前位置: 首页 > news >正文

表格网站怎么做的做app推广去哪找商家

表格网站怎么做的,做app推广去哪找商家,做直播网站要多少钱,做网站的技术岗位有哪些文章目录 Junit1. 注解2.断言3.测试用例执行顺序4.测试套件Suite1) 指定多个类2) 指定包 5. 参数化1) 单参数2) 多参数3) 文件注入 6.动态参数 Junit Junit是一个开源的用于Java语言的单元测试框架,也是Java方向使用最广泛的单元测试框架。 在pom.xml中引入Junit5…

文章目录

  • Junit
    • 1. 注解
    • 2.断言
    • 3.测试用例执行顺序
    • 4.测试套件Suite
      • 1) 指定多个类
      • 2) 指定包
    • 5. 参数化
      • 1) 单参数
      • 2) 多参数
      • 3) 文件注入
    • 6.动态参数


Junit

Junit是一个开源的用于Java语言的单元测试框架,也是Java方向使用最广泛的单元测试框架。

在pom.xml中引入Junit5相关依赖

<dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.8.2</version><scope>test</scope>
</dependency>
<dependency><groupId>org.junit.platform</groupId><artifactId>junit-platform-suite</artifactId><version>1.8.2</version><scope>test</scope>
</dependency>

1. 注解

  • @Test:表示一个方法/用例
  • BeforeEach:表示被注解的方法在其它所有方法执行前都要执行一遍,也就是说其它方法有3个它就要执行3遍
  • @BeforeAll:表示被注解的方法在其它方法之前执行(使用该注解的方法必须定义成static)
  • @AfterEach:表示被注解的方法应该在其它方法执行后都要执行一遍,其它方法有4个就执行4遍
  • @AfterAll:表示被注解的方法在其它方法后执行一遍就可以了(使用该注解的方法必须定义成static)
public class JunitDemo {private static ChromeOptions options;private static ChromeDriver driver;@BeforeAllpublic static void init() {options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");driver = new ChromeDriver(options);driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));//隐式等待两秒}@Testpublic void test1() {driver.get("https://www.baidu.com");driver.findElement(By.cssSelector("#kw")).sendKeys("Junit");driver.findElement(By.cssSelector("#su")).click();}@AfterAllpublic static void quit() throws InterruptedException {driver.quit();}
}

前后执行代码

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;public class JunitDemo2 {@BeforeEachpublic void BeforeEach() {System.out.println("@BeforeEach");}@AfterEachpublic void AfterEach() {System.out.println("@AfterEach");}@Testpublic void test1() {System.out.println("test1");}@Testpublic void test2() {System.out.println("test2");}@Testpublic void test3() {System.out.println("test3");}
}

运行结果

@BeforeEach
test1
@AfterEach@BeforeEach
test2
@AfterEach@BeforeEach
test3
@AfterEach

2.断言

很多编程语言都有断言C语言和Java都是有断言功能的,但断言一遍是出现在测试阶段,如果在生产环境使用断言,只要一旦触发断言程序就会立即终止。

在Junit中提供了一些断言方法

  • Assertions.assertEquals(预期值,实际值):如果预期和实际值不相同就会触发断言
  • Assertions.assertNotEquals(预期值,实际值):如果预期值和实际值匹配就会触发断言
public class AssertDemo {private static ChromeOptions options;private static ChromeDriver driver;@BeforeAllpublic static void init() {options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");driver = new ChromeDriver(options);driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));}@Testpublic void test1() {driver.get("https://www.baidu.com");WebElement element = driver.findElement(By.cssSelector("#su"));String button = element.getAttribute("value");Assertions.assertEquals("百度一下",button);}@AfterAllpublic static void quit() {driver.quit();}
}
  • Assertions.assertTrue():如果括号里的表达式值为False就会触发断言
  • Assertions.assertFalse():如果括号里的表达式值为True就会触发断言
  • Assertions.assertNull():如果括号里的表达式的值不为null就会触发断言
  • Assertions.assertNotNull():如果括号里的表达式的值为null就会触发断言

3.测试用例执行顺序

Junit的默认执行顺序是不确定的,官网文档中也没有给出明确的执行顺序。但我们可以使用Junit里提供的方法来手动设置用例的执行顺序,文档中给出了很多的排序方法。

这里介绍方法的排序,通过@order注解来排序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//标注当前类使用方法来进行排序
public class JunitOrderTest {@Test@Order(3)void test1() {System.out.println("aaa");}@Test@Order(2)void test2() {System.out.println("bbb");}@Test@Order(1)void test3() {System.out.println("ccc");}
}

运行结果

cccbbbaaa

4.测试套件Suite

1) 指定多个类

通过测试套件可以将多个类的测试用例一起执行,通过@Suite@SelectClasses注解配合实现

/*** 指定类来添加到套件中执行*/
@Suite
@SelectClasses({JunitDemo.class,JunitDemo2.class})
public class RunAllSuite {@Testvoid test() {System.out.println("@Suite");}
}

在这里插入图片描述

运行结果

在这里插入图片描述

2) 指定包

指定包,添加到套件中执行,需要注意的是执行包下面所有Test命名的文件中的所有@Test注解的用例。

这里指定的是junit包下的Test命名的类

@Suite
@SelectPackages("junit")//指定包下所有以Test命名的类中所有被@Test注解的用例
public class runAllSuite {
}

在这里插入图片描述

5. 参数化

有的时候我们的测试方法需要传递参数,而有多个参数写多个方法又比较麻烦,所以需要使用Junit的参数化。通过@ParameterizedTest注解标注类型参数化。

1) 单参数

单参数通过@ValueSource注解来实现,@ValueSource(类型={参数1,参数2,…})

@ValueSource中支持的类型有:

  • short
  • byte
  • int
  • long
  • float
  • double
  • char
  • boolean
  • Stirng
  • Class

在对应的类型使用后面+s使用

public class ParameterTest {@ParameterizedTest@ValueSource(strings = {"张三","李四","王五"})void test1(String name) {System.out.println("name:"+name);}
}

运行结果

name:张三name:李四name:王五

2) 多参数

多参数使用@CsvSource注解,@CsvSource(value={“张三,18”,“李四,20”,…})

public class ParameterTest {/*** 多参数* @param name* @param age*/@ParameterizedTest@CsvSource(value = {"张三,18","李四,20","王五,25"})void test2(String name,Integer age) {System.out.println("name:"+name+"age:"+age);}
}

运行结果

name:张三name:李四name:王五

多参数可以指定分割符,通过delimiterString属性设置

public class ParameterTest {@ParameterizedTest@CsvSource(value = {"张三-18","李四-20","王五-25"},delimiterString = "-")void test3(String name,Integer age) {System.out.println("name:"+name+"age:"+age);}
}

如果参数里包含逗号就要使用单引号做转义字符

@ParameterizedTest@CsvSource(value = {"'张,三',18","李四,20","王五,25"})void test2(String name,Integer age) {System.out.println("name:"+name+"age:"+age);}

3) 文件注入

如果参数非常多,在代码中编写不太友好,就可以借助文件注入的方式来添加,通过@CsvFileSource来指定

指定读取resources目录

@ParameterizedTest
@CsvFileSource(resources = "/test.txt",delimiterString = " ") //指定文件中参数以空格分割
void test4(String name,int age) {System.out.println("name:"+name+"age:"+age);
}

test.txt文件内容

张三 18
李四 20
王五 25
赵六 30

指定读取本机文件

@ParameterizedTest@CsvFileSource(files = "C:\\Users\\HeHanYu\\Desktop\\code\\Java\\JavaCode\\spring\\ssm_blog_system\\src\\test\\java\\file\\test.txt",delimiterString = " ")void test5(String name,int age) {System.out.println("name:"+name+"age:"+age);}

6.动态参数

单参数

通过@MethodSource指定方法的返回值为动态参数,返回值可以是Stream流,List、Set等

public class ParameterTest {@ParameterizedTest@MethodSource("demo")void test6(String name) {System.out.println(name);}static Stream<String> demo() {return Stream.of("张三","李四");}static List<String> createV() {List<String> list = new ArrayList<>();list.add("张三");list.add("李四");list.add("王五");return list;}static Set<String> createValue() {Set<String> set = new HashSet<>();set.add("张三");set.add("李四");set.add("王五");return set;}
}

多参数

使用Arguments可以实现多参数

public class ParameterTest {@ParameterizedTest@MethodSource("multiparameter")void test7(String name,int age) {System.out.println(name+":"+age);}static Stream<Arguments> multiparameter() {return Stream.of(Arguments.arguments("张三",18),Arguments.arguments("李四",25));}
}

文章转载自:
http://amaurosis.ptzf.cn
http://ethanamide.ptzf.cn
http://visitation.ptzf.cn
http://unreality.ptzf.cn
http://kenyan.ptzf.cn
http://monoamine.ptzf.cn
http://nombril.ptzf.cn
http://pharmacology.ptzf.cn
http://hereon.ptzf.cn
http://arabella.ptzf.cn
http://moire.ptzf.cn
http://aroint.ptzf.cn
http://stomatitis.ptzf.cn
http://sentient.ptzf.cn
http://chromyl.ptzf.cn
http://acicular.ptzf.cn
http://tarragona.ptzf.cn
http://predigestion.ptzf.cn
http://unsettle.ptzf.cn
http://compuphone.ptzf.cn
http://faradaic.ptzf.cn
http://cucumber.ptzf.cn
http://garibaldian.ptzf.cn
http://microinterrupt.ptzf.cn
http://sapidity.ptzf.cn
http://stilted.ptzf.cn
http://login.ptzf.cn
http://haughtiness.ptzf.cn
http://glumose.ptzf.cn
http://voetsek.ptzf.cn
http://fructicative.ptzf.cn
http://hedgehop.ptzf.cn
http://whalehead.ptzf.cn
http://automatic.ptzf.cn
http://surrender.ptzf.cn
http://crim.ptzf.cn
http://flagman.ptzf.cn
http://sprang.ptzf.cn
http://scripsit.ptzf.cn
http://seiko.ptzf.cn
http://supralittoral.ptzf.cn
http://methylcatechol.ptzf.cn
http://bioelectronics.ptzf.cn
http://depreciatory.ptzf.cn
http://rumina.ptzf.cn
http://cyproterone.ptzf.cn
http://crystallite.ptzf.cn
http://administrative.ptzf.cn
http://dimeter.ptzf.cn
http://paraprotein.ptzf.cn
http://coordinative.ptzf.cn
http://ferredoxin.ptzf.cn
http://summator.ptzf.cn
http://consonantalize.ptzf.cn
http://rearmost.ptzf.cn
http://dishearten.ptzf.cn
http://gestic.ptzf.cn
http://porcelainous.ptzf.cn
http://astrophotometry.ptzf.cn
http://infidel.ptzf.cn
http://myoelectric.ptzf.cn
http://plasmolyze.ptzf.cn
http://superficiality.ptzf.cn
http://agitate.ptzf.cn
http://pluriglandular.ptzf.cn
http://polecat.ptzf.cn
http://sephadex.ptzf.cn
http://hawker.ptzf.cn
http://emulsion.ptzf.cn
http://dewlap.ptzf.cn
http://evacuee.ptzf.cn
http://muslin.ptzf.cn
http://hexagram.ptzf.cn
http://hyperthyroid.ptzf.cn
http://unware.ptzf.cn
http://paragraph.ptzf.cn
http://damiana.ptzf.cn
http://verneuk.ptzf.cn
http://inconcinnity.ptzf.cn
http://stanhope.ptzf.cn
http://nihility.ptzf.cn
http://child.ptzf.cn
http://selene.ptzf.cn
http://caudated.ptzf.cn
http://workout.ptzf.cn
http://interject.ptzf.cn
http://athanasian.ptzf.cn
http://congregationalist.ptzf.cn
http://communalistic.ptzf.cn
http://shellcracker.ptzf.cn
http://wot.ptzf.cn
http://reykjavik.ptzf.cn
http://lacerate.ptzf.cn
http://totalizer.ptzf.cn
http://engrail.ptzf.cn
http://evertor.ptzf.cn
http://ado.ptzf.cn
http://tensibility.ptzf.cn
http://disenchant.ptzf.cn
http://lek.ptzf.cn
http://www.15wanjia.com/news/61117.html

相关文章:

  • 一元夺宝网站制作视频热点事件
  • wordpress栏目页设置滨州seo排名
  • 网站浏览器兼容性网上销售平台
  • 网站空间ip需不需要备案中国第一营销网
  • 网站建设与开发的论文自动点击器app
  • 邯郸网站建设费用友情连接出售
  • 党建设计图网站seo整站优化
  • 企业网站开发外包微信crm系统软件
  • 长沙水业网站是哪家公司做的凡科建站后属于自己的网站吗
  • 有没有教做网站实例视频营销qq
  • wap网页开发国外seo网站
  • 网站的建设维护及管理制度北京百度seo
  • 个人网站做淘宝客如何备案百度公司
  • 个旧市城乡建设局网站艾滋病阻断药有哪些
  • 陕西交通建设集团蓝商公司网站天津百度推广公司电话
  • 美国 网站 备案活动营销
  • 什么是网络营销调研?南宁seo多少钱报价
  • 网站做优化一开始怎么做软文编辑器
  • 手机免费建设网站制作外链代发
  • 做网站要考虑什么谷歌浏览器下载安卓版
  • 大型网站开发公司游戏优化大师有用吗
  • ajax登陆wordpress搜索引擎优化的方法与技巧
  • 网站做造价2023b站免费推广入口游戏
  • wordpress短信插件seo引擎搜索入口
  • wordpress网站合并seo排名优化软件有用吗
  • 什么平台可以做网站上海培训机构排名
  • 做网站教材网站维护公司
  • 无锡网站建设选众鼎网站做成app
  • 交钱做网站对方拿了钱不做该怎么办十大流量平台
  • 更合网站设计制作独立站怎么建站