实验三 面向对象程序设计

 



课程:《程序设计与数据结构》
班级: 2023
姓名: 肖衍豪
学号:20202310
实验教师:王志强
实验日期:2021929
必修/选修: 必修

## 1.实验内容
1). 初步掌握单元测试和TDD
2). 理解并掌握面向对象三要素:封装、继承、多态
3). 初步掌握UML建模

## 2. 实验过程及结果

1进行单元测试和TDD

首先对于单元测试和TDD的定义进行了解和深入学习。单元测试是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。TDD测试驱动开发(Test-Driven Development)是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XPExtreme 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. 实验过程中遇到的问题和解决过程
- 问题1ojdbc.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)
-  ...

 

posted @ 2021-11-07 23:05  20202310肖衍豪  阅读(96)  评论(0编辑  收藏  举报