NJUPT《软件工程(双语)》

1/3 考前复习

复习课笔记

https://wwb.lanzouh.com/iMVah06936ej

2/3 课堂练习

https://wwb.lanzouh.com/iWBdl05qw75g

https://wwb.lanzouh.com/ieaYZ05yjpti

https://wwb.lanzouh.com/i47ze05cy8je

3/3 实验报告

实验三:Software Unit Testing
  • 实验目的和要求

对 Java 单元测试有初步的了解,学会使用 Junit 编写自己的测试用例,掌握对被测试类进行测试的实现方法;了解轻量级的自动化工具 Selenium,学会使用 Selenium 进行网站自动化测试(选做)。

  • 实验环境

Eclipse、jdk1.8、chrome browser

  • 实验步骤

利用 Junit 编写测试用例,并对被测试类进行相关功能测试。
a) 验证 Book 类的 equals 方法;

Book.java:


package cn.edu.njupt;
public class Book {
    private String title;
    private double price;
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    public boolean equals(Object object) {
        if(object instanceof Book){
            Book book=(Book)object;
            return getTitle().equals(book.getTitle())
                    && getPrice()==book.getPrice();
        }
        return false;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
}
BookTest.java:


package cn.edu.njupt;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class BookTest {
    private Book book1;
    private Book book2;
    @BeforeEach
    void setUp() {
        book1=new Book("ES",12.99);
        book2=new Book("The Grate",11.99);
    }
    @AfterEach
    void tearDown() {
        book1=null;
        book2=null;
    }
    @Test
    void testEquals() {
        assertFalse((book2.equals(book1)));
        assertTrue((book1.equals(book1)));
    }
}

B)设计 Triangle 类的测试用例,并进行测试。


Triangle.java:


package cn.edu.njupt;
public class Triangle {
    protected long lborderA=0;
    protected long lborderB=0;
    protected long lborderC=0;
    public Triangle(long lborderA, long lborderB, long lborderC) {
        this.lborderA = lborderA;
        this.lborderB = lborderB;
        this.lborderC = lborderC;
    }
    public static boolean isTriangle(Triangle triangle){
        boolean isTriangle=false;
        if((triangle.lborderA>0 && triangle.lborderA<=Long.MAX_VALUE/2)
                &&(triangle.lborderB>0 && triangle.lborderB<=Long.MAX_VALUE/2)
                &&(triangle.lborderC>0 && triangle.lborderC<=Long.MAX_VALUE/2))
            if((triangle.lborderA < (triangle.lborderB+triangle.lborderC))
                    &&(triangle.lborderB < (triangle.lborderA+triangle.lborderC))
                    &&(triangle.lborderC < (triangle.lborderB+triangle.lborderA)))
                    isTriangle=true;
        return isTriangle;
    }

    public static String getType(Triangle triangle){
        String strType="不是三角形";
        if(isTriangle(triangle)){
            if(triangle.lborderA==triangle.lborderB
                && triangle.lborderB==triangle.lborderC){
                strType="等边三角形";
            }
            else if((triangle.lborderA !=triangle.lborderB)
                &&(triangle.lborderB !=triangle.lborderC)
                &&(triangle.lborderA !=triangle.lborderC))
                strType="不等边三角形";
            else{
                strType="等腰三角形";
            }
        }
        return strType;
    }
}
TriangleTest.java:


package cn.edu.njupt;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class TriangleTest {
    private Triangle triangle1;
    private Triangle triangle2;
    private Triangle triangle3;
    private Triangle triangle4;
    private Triangle triangle5;
    private Triangle triangle6;
    @BeforeEach
    void setUp() {
        triangle1=new Triangle(3,3,3);
        triangle2=new Triangle(3,4,5);
        triangle3=new Triangle(3,3,5);
        triangle4=new Triangle(-1,3,5);
        triangle5=new Triangle(3,10,5);
        triangle6=new Triangle(3,3,5);
    }
    @AfterEach
    void tearDown() {
        triangle1=null;
        triangle2=null;
        triangle3=null;
        triangle4=null;
        triangle5=null;
        triangle6=null;
    }
    @Test
    void isTriangle() {
        assertTrue(Triangle.isTriangle(triangle6));
        assertFalse(Triangle.isTriangle(triangle4));
        assertFalse(Triangle.isTriangle(triangle5));
    }
    @Test
    void getType() {
        assertEquals("等边三角形",Triangle .getType(triangle1));
        assertEquals("不等边三角形",Triangle.getType(triangle2));
        assertEquals("等腰三角形",Triangle.getType(triangle3));
        assertEquals("不是三角形",Triangle.getType(triangle4));
    }
}

4、利用 Selenium 进行 Web 应用程序的自动化测试。(选做)
A)导入Selenium的jar包



B)下载对应Chrome浏览器版本的驱动



(要修改Demo.java中对应的路径)
C)编写demo类:
package king.test;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class Demo1 {
    private WebDriver driver;

    @Before
    public void setUp(){
        //设置谷歌浏览器的驱动
        System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
        //启动谷歌浏览器
        driver=new ChromeDriver();
        //设置默认超时时间
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }
    @After
    public void tearDown() throws Exception{
        //关闭浏览器
        driver.quit();
    }
    @Test
    public void test222() throws Exception{
        //打开测试页面
        driver.get("file:///E:/test.html");
        //通过id找到第一个输入框
        WebElement un =driver.findElement(By.id("un"));
        //第一个输入框输入aaa
        un.sendKeys("aaa");
        //通过id找到第二个输入框
        WebElement pw =driver.findElement(By.className("lala"));
        //第一个输入框输入bbb
        pw.sendKeys("bbb");
        //通过id找到第三个输入框
        WebElement co =driver.findElement(By.name("code"));
        //第一个输入框输入ccc
        co.sendKeys("ccc");
        Thread.sleep(2000);
        //找到页面中的所有的input标签
        List<WebElement> inputs=driver.findElements(By.tagName("input"));
        //获取第四个input标签
        WebElement btn = inputs.get(3);
        //点击按钮
        btn.click();
        Thread.sleep(3000);
    }
}

编写演示页面:test.html(要修改Demo.java中对应的路径)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Generator" content="EditPlus®">
    <meta name="Author" content="">
    <meta name="Keywords" content="">
    <meta name="Description" content="">
    <title>Document</title>
</head>
<body>
    <input id="un" class="css1" name="username">
    <input id="pw" class="css2 lala" name="password">
    <input id="co" class="css3" name="code"><br>
    <input type="button" id="btn" class="css4" name="submit" value="按钮">
    <script>
        document.getElementById('btn').onclick=function(){
            alert("haha");
        }
    </script>
</body>
</html>
实验四:Software Configuration management
  • 实验目的和要求

学会配置Visual SVN Server服务器与用户、用户组和权限,学会用客户端链接服务器端,掌握SVN 常用功能操作完成 svn 的添加、提交、更新、分支建立、合并等操作。

  • 实验环境

1、服务器端:Windows XP
XP 系统安装:https://www.jianshu.com/p/419eff3d6235
Visual SVN Server 选择老版本 2.7.5,下载链接:https://www.visualsvn.com/files/VisualSVN-Server-2.7.5.msi
2、客户端:Windows 10
TortoiseSVN 选择 WIN 32版本1.10.6 ,下载链接:https://tortoisesvn.net/downloads.html

  • 实验步骤

1、安装服务器端 Visual SVN Server



2、配置 SVN 服务器的用户、用户组和权限



3、客户端链接服务器端

4、SVN 常用功能操作
完成 svn 的添加、提交、更新、分支、合并等操作。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容