实验三 面向对象程序设计
课程:《程序设计与数据结构》
班级: 2023
姓名: 肖衍豪
学号:20202310
实验教师:王志强
实验日期:2021年9月29日
必修/选修: 必修
## 1.实验内容
(1). 初步掌握单元测试和TDD
(2). 理解并掌握面向对象三要素:封装、继承、多态
(3). 初步掌握UML建模
## 2. 实验过程及结果
(1)进行单元测试和TDD
首先对于单元测试和TDD的定义进行了解和深入学习。单元测试是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。TDD(测试驱动开发(Test-Driven Development))是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程。
Java的单元测试能做到的功能有:接口功能性测试、局部数据结构测试、边界条件测试、所有独立代码测试、异常模块测试。
以下分别进行以上五项测试:
所有独立性代码测试
@BeforeClass 全局只会执行一次,而且是第一个运行
@Before 在测试方法运行之前运行
@Test 测试方法
@After 在测试方法运行之后允许
@AfterClass 全局只会执行一次,而且是最后一个运行
@Ignore 忽略此方法
断言测试与及常用断言:
查询到断言的常用列表为
-------------->assertTrue(String message, boolean condition) 要求condition == true
-------------->assertFalse(String message, boolean condition) 要求condition == false
-------------->assertEquals(String message, XXX expected,XXX actual) 要求expected期望的值能够等于actual
-------------->assertArrayEquals(String message, XXX[] expecteds,XXX [] actuals) 要求expected.equalsArray(actual)
-------------->assertNotNull(String message, Object object) 要求object!=null
-------------->assertNull(String message, Object object) 要求object==null
-------------->assertSame(String message, Object expected, Object actual) 要求expected == actual
-------------->assertNotSame(String message, Object unexpected,Object actual) 要求expected != actual
-------------->assertThat(String reason, T actual, Matcher matcher) 要求matcher.matches(actual) == true
打包测试:
@RunWith(Suite. class )
@Suite.SuiteClasses( {CalculatorTest. class ,SquareTest. class } )
public class AllCalculatorTests
{
//to do something;
}
参数化测试:
@RunWith(Parameterized. class )
public class TestParam {
private static Calculator calculator = new Calculator();
private int param;
private int result;
@Parameters
public static Collection data(){
return Arrays.asList(new Object[][] {{ 11 , 17 } , { xx1 , xx} } );
}
public TestParam( int param, int result){
this .param = param;
this .result = result;
}
@Test
public void TestResult(){
calculator.square(param);
assertEquals(result, calculator.getResult());
}
}
(2)掌握面向对象三要素:封装、继承、多态
其中三者的关系如下图所示:
(3)初步掌握UML建模
首先将UML软件下载并安装好,打开UML软件之后,熟悉UML建模的基本操作。在进入UML软件的时候,我们会发现菜单栏、已经建类图列表、工具箱、绘图区域、工程区、属性编辑区域这些模块区域功能,接下来了解各种图的创建和画法,包括类图、用例图、时序图、组件图、部署图、协作图、对象图、活动图。完成以上的操作学习就完成了UML建模的初步掌握。
## 3. 实验过程中遇到的问题和解决过程
- 问题1:ojdbc.jar未引入,导致出现问题,系统提示发生错误
- 问题1解决方案:查询资料在web app libraries 引入ojdbc14.jar
-问题2:测试中未引入相关依赖,但是原来的项目没引入这个包也没问题
- 问题2解决方案:输入<dependence>的相关代码解决这个问题
-问题3: @InjectMocks 失效,在controller中调用service时,没有返回mock后的值,而是真正定义的值
-问题3解决方案:使用spring test 提供的的测试方式独立安装和集成Web环境测试,分别数如两种测试的相关代码
## 其他(感悟、思考等)
总体来说,这次的实验难度相对较大,遇到了许多之前没有遇到的问题,在这些问题的解决上花费了不少时间,在解决问题的同时我发现了我对于相关操作的不熟悉,对于一些综合性较强的实验项目有些吃力。经过这次的实验之后,我对于Java的面向对象的特点有了一个更加直观的认识,在对于一些问题的见解上产生了独到的看法。
## 参考资料
- [《Java程序设计与数据结构教程(第二版)》](https://book.douban.com/subject/26851579/)
- [《Java程序设计与数据结构教程(第二版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html)
- ...