• 20145103JAVA第二次实验报告


    实验二 Java面向对象程序设计

    实验内容

    1.初步掌握单元测试和TDD
    2.理解并掌握面向对象三要素:封装、继承、多态
    3.初步掌握UML建模
    4.熟悉S.O.L.I.D原则
    5.了解设计模式

    实验步骤

    (一)单元测试

    (1) 三种代码:当用程序解决问题时,要写三种码:伪代码、产品代码、测试代码。
    需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能。

    (2)实现一个百分制转五分制: 如果成绩小于60,转成“不及格” 如果成绩在60与70之间,转成“及格” 如果成绩在70与80之间,转成“中等” 如果成绩在80与90之间,转成“良好” 如果成绩在90与100之间,转成“优秀” 其他,转成“错误”

    (3)先写伪代码,伪代码与具体编程语言无关,可以使用与编程语法无关的语句(最好英语),有了伪代码后,用编程语言翻译伪代码,就可以得到产品代码,截图如下:

    (4)建一个XXXXTest的类,针对MyUtil类,写一个MyUtilTest.java的测试模块,这里我们设计了一个测试用例(Test Case),测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。这里我们的测试输入是“50”,预期结果是“不及格”。

    运行结果如下,测试结果符合预期,截图如下:

    (5)只有一组输入的测试是不充分的,我们把一般情况都测试一下,代码如下:

    结果如下:

    (6)我们不能只测试正常情况,下面看看异常情况如何,比如输入为负分或大于100的成绩,代码如下:

    结果如下:

    ·运行程序发现负分时与期望不一致,终于找到了一个bug,原因是判断不及格时没有要求成绩大于零。我们修改MyUtil.java,增加对负分的判断,代码如下:

    再次运行测试,测试结果符合预期,如下图所示:


    (7)测试边界情况,对输入为“0,60,70,80,90,100”这些边界情况进行测试的代码如下:


    ·我们发现边界情况中输入100时有一个Bug。我们修改MyUtil.java,把判断优秀的条件中包含输入为100的情况,代码如下:

    再次执行测试,结果如下:

    (二)TDD(Test Driven Devlopment, 测试驱动开发):就是一种先写测试代码,然后再写产品代码的开发方法。

    ·TDD的一般步骤如下:
    明确当前要完成的功能,记录成一个测试列表
    快速完成编写针对此功能的测试用例
    测试代码编译不通过(没产品代码呢)
    编写产品代码
    测试通过
    对代码进行重构,并保证测试通过(重构下次实验练习)
    循环完成所有功能的开发
    操作截图如下:

    在MyUtilTest类中运行,绿色表示被执行部分测试通过。

    练习内容

    写一个类测试编写的复数类的方法

    • 构造函数,将实部,虚部都置为0
    • 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
    • 设置实部,设置虚部
    • 复数相加
    • 复数相减
    • 复数相乘
    public class Complex {
    
        private double realPart;
        private double imaginPart;
        public Complex(){
            double realPart;
            double imaginPart;
        }
        public Complex(double r,double i){
            double realPart;
            double imaginPart;
            this.realPart=r;
            this.imaginPart=i;
        }
        public double getRealPart(){
            return realPart;
        }
        public double getImaginPart(){
            return imaginPart;
        }
        public void setRealPart(double d){
            this.realPart=d;
        }
    
        public void setImaginPart(double d) {
            this.imaginPart =d;
        }
        public void ComplexAdd(Complex c){
            this.realPart+=c.realPart;
            this.imaginPart+=c.imaginPart;
        }
        public void ComplexAdd(double c){
            this.realPart+=c;
        }
        public void ComplexMinus(Complex c){
            this.realPart-=c.realPart;
            this.imaginPart-=c.imaginPart;
        }
        public void ComplexMinus(double c){
            this.realPart-=c;
        }
        public void ComplexMulti(Complex c){
            this.realPart*=c.realPart;
            this.imaginPart*=c.imaginPart;
        }
        public void ComplexMulti(double c){
            this.realPart*=c;
        }
    
        }
    

    测试代码

    import junit.framework.TestCase;
        import org.junit.Test;
    
        import static org.junit.Assert.*;
     public class ComplexTest extends TestCase{
        Complex c1=new Complex(3,5);
        Complex c2=new Complex(3,5);
        double a=5;
    
        @Test
        public void testComplexAdd() throws Exception {
            c1.ComplexAdd(c2);
            assertEquals(6.0,c1.getRealPart());
            assertEquals(10.0,c1.getImaginPart());
        }
    
        @Test
        public void testComplexMinus() throws Exception {
            c1.ComplexMinus(c2);
            assertEquals(0.0,c1.getRealPart());
            assertEquals(0.0,c1.getImaginPart());
    
        }
    
        @Test
        public void testComplexMulti() throws Exception {
            c1.ComplexMulti(c2);
            assertEquals(9.0,c1.getRealPart());
            assertEquals(25.0,c1.getImaginPart());
    
        }
    

  • 相关阅读:
    Postgres 的 Range 类型
    Postgres 的 Array 类型
    joi库 学习笔记
    nginx官方文档 之 http负载均衡 学习笔记
    pm2 官方文档 学习笔记
    SSH 学习笔记
    防止活动上线时 微信openid 被伪造的解决办法
    PHP 中 var_export、print_r、var_dump 调试中的区别
    nake_api_protect 请求保护器——防止请求被恶意刷
    接口的防刷办法
  • 原文地址:https://www.cnblogs.com/20145103fwh/p/5402898.html
Copyright © 2020-2023  润新知