android培训
Unit Testing
单元测试基础
1、Java单元测试框架:JUnit(Eclipse默认安装)、TestNG
2、单元测试目的:判断程序的执行结果与自己的期望结果是否一致
3、口号:keep the bar green,keep the code clean
4、单元测试的任务:
1)接口功能测试:保证接口功能的正确性
2)边界条件测试:当变量是数值,测试主要边界:最大值、最小值、无穷大,测试溢出边界:最大值+1,最小值-1,测试临近边界:最大值-1,最小值+1;当变量是字符串,测试空字符串,对字符串长度应用“数值变量”的边界;当变量是集合,测试空集合,对集合大小应用“数值变量”的边界
3)代码覆盖率测试:语句覆盖、分支覆盖、条件覆盖、路径覆盖等
Java代码覆盖率分析工具:Cobertura,Emma:Eclipse插件Eclemma,Jacoco
5、圈复杂度(Cyclomatic Complexity):衡量一个模块判定结构的复杂程度,圈复杂度大说明程序代码的判断逻辑复杂,难以测试和维护,计算方法:V(G)=e-n+2,其中e表示控制流图中的边的数量,n表示控制流图中节点的数量。圈复杂度的直观计算:V(G)=判定节点数(P)+1 = 区域数,比如下面的代码,圈复杂度为2
Java圈复杂度分析工具:Eclipse插件Metrics
JUnit 3.8
1、JUnit的最佳实践经验:
1)新建名为test的source folder,用于存放测试源代码
src和test分别是两个source folder,程序发布的时候略去test文件夹,但是目标类和测试类生成的.class文件能都在bin目录
2)虽然被测源代码和测试源代码在不同的source folder,但是应在source folder里面建立同名的包,这样测试源代码能够访问源代码里pulic,protected和default的类文件
3)测试类的命名规则:XxxxTest或者TestXxxx
2、在JUnit 3.8中,需要满足:
1)测试类,如XxxxTest必须继承TestCase(TestCase继承Assert)
2)测试方法(测试用例)的4大特点:public、void、无参数 、方法名称以test开头
(其实在文档中给出了说明,更深一步的理解是通过查看源代码)
比如,对待测方法divide():
我们可以设计多个测试用例,如测试正常情况和除数为0的情况:
测试正常的情况:
测试除数为0的情况:
3、测试用例(Test Case)的设计是单元测试的一个重要方面
1)Test Case 之间一定要保持完全的独立性,互补干扰
2)每个Test Case 只完成一项测试任务,测试通过的标准就是完成任务
4、Eclipse集成的测试工具:
测试成功:
测试失败:
5、Eclipse能直接新建JUnit Test Case
6、JUnit本身自带的测试方式:
1)junit.textui.TestRunner.run(CalculatorTest.class);
测试成功:
2)junit.awtui.TestRunner.run(CalculatorTest.class);
测试成功:
7、当被测试的方法是private方法:
答:利用反射(reflection)机制,记住:No reflection,no more framework,比如:
待测试方法:
测试用例:
8、TestSuit:自动执行测试套件里面所有的测试用例
10、在codes文件夹里给出了具体的测试练习
11、JUnit中的失败(failure)和错误(error),error指的是代码中抛出了异常等影响代码正常执行的情况,比如抛出了ArrayOutOfBoundsException,failure指的是assert所期待的结构与程序实际执行的结果不一致,或者直接调用了fail()方法
12、对测试类来说,如果一个测试类中有5个测试方法,那么JUnit就会创建5个测试类的对象,每一个对象只会调用一个测试方法,并且执行测试方法之前,需要先判断测试方法是否是public void no-arg no-return
JUnit 4.4
1、JUnit 4全面引入Annotation来执行编写的测试用例,体会到Annotation的重要性
2、JUnit 4 不要求测试类继承TestCase,测试方法名无需以test开头(最好以test开头),但是需要通过Annotation机制(Annotation Type Test)标识这是一个测试用例,所有被@Test注解所修饰的public void方法都是test case,可被JUnit所执行,比如:
3、JUnit 3.8中的setUp和tearDown,在JUnit 4.4中由Annotation Type Before和Annotation Type After所取代,比如:
4、JUnit 4有全局初始化(@BeforeClass)和全局销毁方法(@AfterClass)修饰public static void no-arg的方法,被@BeforeClass注解所修饰的方法会在所有测试方法执行前执行1次,被@AfterClass注解所修饰的方法会在所有测试方法执行后执行1次,通常这两个注解用于昂贵的资源,比如:数据库连接
5、参数化测试(Parameters):当一个测试类使用参数化运行器运行时,需要在测试类的声明处加上@RunWith(Parameterized.class)注解,表示该测试类将不使用JUnit内建的运行器运行,而使用参数化运行器运行,在参数化运行类中提供参数的方法要使用@Parameters注解,同时在测试类的构造函数中为各个参数赋值(构造方法由JUnit调用),最后编写测试类,它会根据参数的组数来多次运行测试,比如:
注意:参数化测试用于某一测试方法的多组输入,如果一个测试方法,比如add()方法,只需要测试一组输入,那就不必要使用参数化测试
6、在JUnit 4中,如果想要同时运行多个测试,需要使用两个注解:@RunWith(Suite.class)和@Suite.SuiteClasses(Class>[]),通过这两个注解分别指定使用Suite运行器来运行测试用例和指定运行哪些测试类,其中@SuiteClasses中可以继续指定Suite,这样JUnit会再去寻找里面的测试类,一直到能够执行的test case,并执行,比如:
注意:套件测试只有自动化执行所有的测试用,需要先写好各种测试类
JUnit 3.8 API
Class TestCase(继承Assert,实现Test接口):
一个测试类继承自TestCase,定义了桩(fixture)来执行多个测试用例,通过setUp方法初始化fixture,通过tearDown清除
构造方法:
public TestCase():不推荐使用,除非配合setName()方法
public TestCase(java.lang.String name):构造名为name的测试用例,比如:
new CalculatorTest(“testAdd”);
成员方法:
protected void setUp():初始化fixture,在测试方法运行前,setUp首先运行
protected void tearDown():清除fixture,在测试方法运行结束后,tearDown再运行
因此,每一个Test Case的执行顺序为:setUp,testXxx,tearDown
public void setName(java.lang.String name):确定测试用例的名字
源代码分析:
Class Assert(superclass of TestCase 和 TestDecorator):
Assert里定义了一系列的assert method,而且都是static void方法,直接由类名调用,只有当assert fails时,打印信息
public static void assertEquals:判断期望值和真实值是否相同
public static void assertNotNull:判断对象不为空
public static void assertFalse:判断条件为false
public static void assertNotSame:判断两个对象是否相同
public static void assertNull:判断对象为空
public static void assertSame:判断两个对象相同
public static void assertTrue:判断条件为true
public static void fail:如果执行了fail方法,那么测试失败了,Assert.fail应当在Test Case期望不能达到的地方,因此,一旦达到了,说明本次测试失败了
Class TestSuit(测试套件,实现了Test接口):自动化执行测试用例
测试套件是测试用例的集合,自动化执行集合中所有用例
构造方法:
TestSuite():构造空测试套件
TestSuite(java.lang.Class theClass):将一个测试类加入测试套件,比如:
TestSuite suite = new TestSuite(MathTest.class)
TestSuite(java.lang.Class[] classes):将多个测试类加入测试套件,比如:
Class[] testClasses = {MathTest.class,AnotherTest.class };
TestSuite suite = new TestSuite(testClasses);
成员方法:
addTest(Test test):向测试套件增加一个测试用例(测试类中的一个测试方法),比如:
记住:增加一个测试用例,而不是测试类整体,因为一个测试类中有多个测试方法(用例)
addTest(new MathTest(“testAdd”));
不是:addTest(new MathTest());
addTestSuite(java.lang.Class testClass):向测试套件增加测试类
Class RepeatedTest(继承TestDecorator,实现Test接口):
一个能多次重复运行测试的装饰器
构造方法:
RepeatedTest(Test test,int repeat):对Test test进行装饰,增强功能
记住一定是对测试方法,而不是测试类进行装饰:
JUnit 4.4 API
Annotation Type Test:
@Test注解告诉JUnit该public void方法是能被运行的测试用例,@Test注解带有两个可选参数,expected(Class Extends Throwable):声明测试方法应该要抛出异常,如果抛出了声明的异常,测试成功,如果测试方法没有抛出异常,或者抛出的异常不是声明的,那么测试失败,比如:
expected参数的作用就好比JUnit 3.8中的的代码:
(从上面可以看出,JUnit 4简化了测试代码的书写)
另一个可选参数是timeout(long),当测试用例的执行时间超过指定的时间时,测试失败
Annotation Type Ignore:忽略测试类或者测试方法
当@Ignore注解修饰测试类时,表示忽略测试类中的所有测试方法;当修饰测试方法时,表示忽略该测试方法,可选参数String value,表示被忽略的原因
org.junit.runners.Suite:
Suite运行器,用来执行测试用的集合,相当于JUnit 3.8中的public static Test suite(),为了使用Suite运行器,需要由@RunWith(Suite.class)和@Suite.SuiteClasses ({TestClass1.class,…})
org.junit.runners.Parameterized(继承Suite):
参数化运行器,实现了参数化测试功能
分享到:
相关推荐
《2018年下半年黑马程序员课改之后最新Java企业级项目——学成在线学习平台》 本项目基于Java技术栈,是2018年下半年黑马程序员进行课程改革后推出的企业级实战项目,名为“学成在线学习平台”。该平台旨在模拟真实...
本篇将根据"黑马程序员Android入学考试"的题目,深入讲解相关知识点。 一、Android体系结构 1. Linux内核:Android系统基于Linux内核,提供了硬件驱动支持、内存管理、进程调度等功能。 2. HAL(Hardware ...
根据提供的信息,我们可以总结出以下关于“中关村黑马程序员训练营Android-4.0视频”的相关知识点: ### 一、概述 “中关村黑马程序员训练营Android-4.0视频”是一套针对Android开发初学者和进阶学习者的培训课程...
这里我们关注的是如何将JUnit集成到Spring Boot项目中来进行单元测试。JUnit是Java领域最常用的单元测试框架,它提供了一套简便的API来编写和运行测试用例。 首先,我们需要在Spring Boot项目中添加JUnit的依赖。在...
在本篇“黑马程序员---注解归纳”中,我们将深入探讨注解的基本概念、类型以及它们在实际开发中的应用。 首先,注解在Java中是一种特殊的声明,以`@`符号开头,后面跟着注解的名称。它们可以应用于类、接口、方法、...
《黑马程序员瑞吉外卖基本功能完整版》是一个针对Java编程的学习资源,主要涵盖了瑞吉外卖系统的基本功能实现,包括增删改查等核心操作。这个项目对于初学者来说是一个很好的实践平台,它可以帮助你深入理解Java编程...
这个复习资料主要涵盖了Eclipse的使用、程序的断点调试、Eclipse常用快捷键、JUnit测试框架、Java 5的新特性(静态导入和自动装箱拆箱)以及增强for循环和可变参数等知识点。 1. **Eclipse的使用**: Eclipse是一...
本教程出自知名教育机构黑马程序员,该机构以其深入浅出的教学方式和实用的案例著称。 在本教程中,你将学习到以下关键知识点: 1. **Java环境搭建**:首先,你需要了解如何下载和安装Java Development Kit (JDK)...
通过该项目,掌握了SpringBoot、Validation、Redis、JWT、JUnit、MyBatis、Vue、Axios、Vue-Router、Pinia等技术,并进行了后端校验、登录认证流程、全局异常处理、MyBatis实战和前端工程化开发等多方面的优化,积累...
在测试中,JUnit利用反射来调用私有方法进行测试;在配置文件驱动的应用中,可以通过反射根据配置动态创建和初始化对象。 泛型和反射的结合可以实现更高级的功能。例如,我们可以通过反射创建一个未知类型的集合,...
在【描述】中反复提及“黑马课程最后一个大项目”,这表明它可能是黑马程序员培训机构的一个高级课程项目,用于总结和巩固学员在整个课程中的所学知识。这个项目可能涵盖了从前端界面到后端服务的完整流程,包括用户...
- **JUnit 4.12**: 测试框架,用于编写和运行单元测试。 - **SLF4J 1.7.2**: 日志门面,用于简化日志框架的使用。 - **Protobuf 3.5.1**: 一种高效的协议数据交换格式。 - **Avro**: 一种数据序列化系统,用于...
这可能涉及到JUnit、Mockito等测试工具的使用,确保每一个模块在实际运行中的正确性。 8. **持续集成与部署**:项目可能采用了持续集成工具如Jenkins,配合Git进行版本控制,实现自动化构建和部署,提高开发效率。 ...
【Java编程基础】 ...以上是黑马Java教程知识点笔记的主要内容,涵盖了Java编程的基础到进阶知识,是学习和巩固Java技能的重要参考资料。通过深入理解和实践这些知识点,开发者可以逐步提升Java编程能力。
- **《JUnit Recipes中文版:程序员实用测试技巧》** 星级:★★★★☆ 适合对象:初级,中级,高级 随着敏捷开发方法的普及,单元测试变得越来越重要。本书通过一系列具体的示例,介绍了如何使用JUnit进行...
1. JUnit:Java开发者的主流单元测试框架,提供了丰富的断言方法和测试注解,便于编写和执行测试用例。 2. Selenium:一个用于Web应用程序自动化测试的工具,支持多种浏览器和编程语言,如Java、Python等。 3. ...
10. **集成测试与静态代码分析**:通过 Jenkins,开发者可以在构建过程中执行集成测试和静态代码分析,如 JUnit 测试、FindBugs 或 PMD,以提升代码质量和稳定性。 11. **持续部署(Continuous Deployment/Release...
7. **单元测试**:银行系统的代码可能包含JUnit测试类,用于验证代码的正确性,这是软件开发过程中的重要环节。 8. **项目管理**:了解如何组织和管理代码文件,遵循一定的命名规范,以及使用版本控制系统如Git进行...
- 开发过程中,使用JUnit等单元测试框架对游戏逻辑进行测试,确保游戏功能的正确性。同时,IDE的调试工具也是必不可少的,可以帮助定位和修复问题。 通过学习和分析这个Java五子棋项目,开发者不仅可以掌握基本的...
6. **测试文件**:可能包含JUnit测试类,用于验证各个模块的功能正确性。 学习这个项目,你可以深入理解SSH框架的协同工作,掌握MVC模式在实际项目中的运用,以及如何构建一个基本的电子商务系统。此外,你还能了解...