从一个简单的Junit demo到一个用户名与密码的验证

学习Junit,首先肯定是要环境的搭建与配置。

第一步,安装JDK,配置环境变量

第二步,安装eclipse。OS X环境下,eclipse并不是免安装的。这也是需要耐心等待的。

第三步,新建一个maven project。目录中会自动新建代码的folder和用于管理junit的test代码的folder。

第四步,修改配置文件pom.xml,讲maven依赖配置为较新的版本。当然依个人爱好。之后便是等待环境built。从maven库下载相关的工具包。

环境built好,便是学习的开始——junit api。许要说明的是,学习这个需要有一点点java基础,至少需要知道一些基本的语法和数据类型等,方法的定义,这个就不多说了。

JUnit测试基本规则

新建junit测试用例的class,名称最好要对应目标测试类,目标测试类名Test,如源代码类名HelloWorld,测试类就应命名为HelloWorldTest。

测试方法上一行,一般要加上@Test,表示这是测试方法。测试方法名对应好被测试的方法,即test+被测试方法名(注意首字母大写)。

junit已经封装了很多api,像最基本的断言assertion,有返回值类型为boolean的assertFalse(失败时返回值,false)/assertTrue(失败时返回值,true);也有通用类型的assertThat(失败时返回值,object1,object2)(可用于判断两个对象是否相同/相等),还有assertEquals等。

asumeThat用作过滤条件,当参数满足asumeThat中的条件时,才可以执行下一步,类似于java的if()。

比较assertThat、 assertEquals、 assertSame/assertNotSame

相同点:

1. assertThat和assertEquals、assertSame/assertNotSame都可以用于判断两个值相同/相等或者不同/不等

2. assertEquals和assertThat都可以传两个参数或者三个参数。

不同点:

1.语法不同。assertEquals和assertThat有时不需要测试结果为失败时的输出断言,assertSame/assertNotSame则需要。

2.使用范围不同。assertEquals传2个参数时,只用于比较两个int类型的值,即assertEquals(期望值,实际值),传三个参数时,可以与assertThat一样传任意对象;assertEquals用于比较两个值是否相等,不管其在内存中的存放位置,相当于java中的equals,而assertSame/assertNotSame不仅要比较值,还要比较位置,相当于java中的==。

比较器:蓝布达表达式

junit封装了一下自己的比较器,语法比较通俗,能读懂英语就可读懂代码。像allOf(a,b) 、anyOf(a,b)、either(a).or(b)  、both(a).and(b)等。比如下面一段代码:

public void testAssertThatHamcrestCoreMatchers() {

    assertThat("good", allOf(equalTo("good"), startsWith("good")));

    assertThat("good", not(allOf(equalTo("bad"), equalTo("good"))));

    assertThat("good", anyOf(equalTo("bad"), equalTo("good")));

    assertThat(7, not(CombinableMatcher.<Integer> either(equalTo(3)).or(equalTo(4))));

    assertThat(new Object(), not(sameInstance(new Object())));

  }

测试超时timeout

对单个方法进行超时测试,

Rule:对整个文件中的方法都测试timeout

测试异常

@Test(expected = **Exception.class)

例如:

@Test(expected = NullPointerException.class)

public void testLengthArray(){

HelloWorld hwd = new HelloWorld();

hwd.lengthArray(null);

}

数据点批量测试

@Theories

@DataPoint

在你的测试类里,每一条定义常量的语句上方注明@DataPoint标签;在你的测试方法上注明@Theories标签,同时,在类外面也要标上@RunWith(Theories.class)。如下:

@RunWith(Theories.class)

public class HelloWorld2Test {

@DataPoint

public static String USERNAME_NULL = null;

@DataPoint

public static String USERNAME_NONE ="";

@DataPoint

public static String USERNAME_WITH_ZENG = "zeng";

@DataPoint

public static String USERNAME_WITH_SLASH = "wuqian101";

@DataPoint

public static String USERNAME_WITH_ZENGHUI = "zenghui222";

@Theory

public void testValidateUser1(String username) {

HelloWorld2 hwd2 = new HelloWorld2();

assumeThat(username, containsString("zenghui"));

assertEquals(1, hwd2.validateUser(username));

}

每一个测试方法对应一个测试用例,则都要带上@Theory标签。

标注要执行的测试方法与不执行的测试方法

@ignore

个别方法或者极少数方法需要不被执行时,就可在方法上标注@ignore

@FixMethodOrder(MethodSorters.NAME_ASCENDING)

该测试标签写于class外的上面,添加该标签,类中的测试方法会按照方法名的字母排序顺序来执行。

JUnit 两日游的更多相关文章

  1. 【百度地图API】北京周边7日游——图标按路线轨迹行动

    原文:[百度地图API]北京周边7日游--图标按路线轨迹行动 任务描述: 春节就要来啦~酸奶小妹的妈妈要从遥远的重庆,来到北京过春节呢!酸奶小妹忙着给妈妈计划,北京周边的旅游线路.计划好路线后,就开始 ...

  2. 暑期培训7日游解题思路(day1~day3)

    暑期培训7日游解题思路(day1~day3) day1 第一天,王聿中老师出的题目比较简单,T1很水,T2是个简单的DP,T3还是有一点意思的.在网格图中删掉若干条边,使得所有格子都联通,求删掉的边的 ...

  3. 【week10】规格说明书练习-吉林市1日游

    假设我们全班同学及教师去吉林省吉林市1日游,请为这次活动给出规格说明书. 版本:1.0 编订:于淼 团队:2016级计算机技术全体同学 日期:2016/11/19 1.引言 1.1 编写目的 1.2 ...

  4. GitHub超全机器学习工程师成长路线图,开源两日收获3700+Star!【转】

    作者 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 近日,一个在 GitHub 上开源即收获了 3700+ Star 的项目,引起了营长的注意.据介绍,该项目以 TensorFlow ...

  5. 简单总结在51cto平台的两日学习

    许久未曾静下心写东西,希望这会是一个好习惯的开始. 一次偶然的机会,大概是160415在Applestore邂逅51cto,看了点评果断下载,着实是一款优秀的学习软件. 由于最近正在用python写自 ...

  6. NOIp蒟蒻的爆零记——HA-0132

    考前: 从十一月开始的听课集训,连考六场:考前的最后两天写(da)着(zhe)各种各样的奇(C)葩(S)模板:一周的疯狂,已经过去: 考前的一晚:第二批高二的六个人聚在一起(还有滑稽大师),愉快的玩( ...

  7. 公司outing选项

    Sign up:  2014 Summer Outing   请您从以下三个方案中选择您最感兴趣的一个项目, 如果您不能参加此次summer outing, 请选择"遗憾放弃"- ...

  8. angularjs笔记《二》

    小颖最近不知怎么了,老是犯困,也许是清明节出去玩,到现在还没缓过来吧,玩回来真的怕坐车了,报了个两日游得团,光坐车了,把人坐的难受得,去了也就是爬山,回来感觉都快瘫了,小颖去的时候还把我家仔仔抱着一起 ...

  9. SEO编辑必看:撰写搜索引擎喜爱的标题

    导读:非常有干货,百度站长平台刚发布了这篇篇文章,文章建议:1,标题字数控制在65个字节内,2,重要内容放在标题的最前面,3,添加与网页内容最相关的.用户更常用的.满足用户明确需求的.体现时效性.关键 ...

随机推荐

  1. test20181219 连续段的期望

    题意 连续段的期望 [问题描述] 小N最近学习了位运算,她发现2个数xor之后数的大小可能变大也可能变小,and之后都不会变大,or之后不会变小.于是她想算出以下的期望值:现在有 N个数排成一排,如果 ...

  2. fn project 生产环境使用

    此为官方的参考说明   Running Fn in Production The QuickStart guide is intended to quickly get started and kic ...

  3. vscode: Visual Studio Code 常用快捷键【轉】

    主命令框 F1 或 Ctrl+Shift+P: 打开命令面板.在打开的输入框内,可以输入任何命令,例如: 按一下 Backspace 会进入到 Ctrl+P 模式 在 Ctrl+P 下输入 >  ...

  4. python 函数 hex()

    hex(x)作用:hex() 函数用于将10进制整数转换成16进制整数. x-10进制整数,返回16进制整数 实例: >>>hex(255) '0xff' >>> ...

  5. jquery调用spring mvc接口返回字符串匹配

    背景:有个增删改页面,用jquery祭出ajax异步调用接口,spring mvc响应对象是个json字符串,jquery根据响应结果判断,如果删除成功给出提示.那么问题来了,接口里响应的字符串怎么匹 ...

  6. laravel安装初体验

    1.github下载laravel 2.通过composer安装相应的库 composer config repo.packagist composer https://packagist.phpco ...

  7. php代码优化 -- array_walk 和 foreach, for 的效率的比较

    <?php /** * array_walk 和 foreach, for 的效率的比较. * 我们要测试的是foreach, for, 和 array_walk的效率的问题. */ //产生一 ...

  8. 什么是语义化的HTML

    语义化的HTML使用每个html标签都特定的用途,例如p标签放大段文字, h1~h6常用于标题,strong加粗强掉….. 语义化的好处: 1:去掉或样式丢失的时候能让页面呈现清晰的结构: html本 ...

  9. Vertrigo Serv + testlink 环境搭建

    今天偶要教大家,使用VertrigoServ来搭建PHP服务器平台.有兴趣的你将会马上拥有一台PHP的WEB服务器哦,呵呵! 第一次给偶的感觉类似于我们租用的PHP虚拟主机.功能可和APPSERV媲美 ...

  10. Eclipse maven工程生命周期clean、compile、test、package

    1.清理. 编译 工程右键->Run As->Maven build... 清理.编译操作控制台信息输出: 2.测试  同清理.编译,goals改成test 3.打包  同清理.编译,go ...