EE308FZ LAB 11 Junit Test

Hester1028 2021-12-15 15:27:44

The Link Your Class

https://bbs.csdn.net/forums/MUEE308FZ

The Link of Requirement of This Assignment

LAB 11 Software Testing-CSDN社区

The Aim of This Assignment

Software Testing

MU STU ID and FZU STU ID

19105428_831902220

Preparation

Learn related knowledge about Junit Test for Java and Unittest for python. You can finish the following assignment or test Your Project.

Task

  1. Here are Junit Test task and Unittest task for choose. If you are good at Java , we suggest you choose the first one, if you are good at Python, then, the latter one.
  2. Follow the requests and tips, complete the test task .

Requirements

  1. You should be familiar with Junit Test or Unittest and the usage of these tools.Such as ‘assert, suite, timeout’, check problems for detail.
  2. Fix the missing codes according to requirement for every problem.

Tips:

@Parameters:Add this annotation to every method if it provide data. By the way, these methods must be static, return a Collection and receive no parameter. 

P.S.: You must assign value for every field in the class no matter used or unused!

In Junit, you can use @RunWith and @parameter to pass parameters.

@RunWith:When a class annotated by @RunWith or when a class extends a base class which annotated by @RunWith,then Junit will run test through a runner pointed by the annotation.

The following is the code I use to test:

Junit Test

  • Junit assert

  • Related Knowledge: you can check the expected result and the real result of the method you test with the help of org.junit.Assert.

 

 

1.Junit assert

import static org.junit.Assert.*;
import org.junit.Test;
public class AssertionsTest {
	String obj1 = "junit";
	String obj2 = "junit";
	String obj3 = "test";
	String obj4 = "test";
	String obj5 = null;
	int var1 = 1;
	int var2 = 2;
	int[] arithmetic1 = { 1, 2, 3 };
	int[] arithmetic2 = { 1, 2, 3 };
	@Test
    public void test() {
	    // add assert test code between Begin and End, no other change allowed 
	    /***********************Begin**************************/
        assertTrue(var1 < var2);
        assertFalse(obj4==obj5);
        assertEquals(obj1,obj2);
        assertSame(obj1,obj2);
        assertNotSame(obj1,obj3);
        assertArrayEquals(arithmetic1,arithmetic2);
        assertNotNull(obj1);
        assertNull(obj5);
        //assertTrue(var1 < var2); for example
	    /************************End***************************/
        }
}

2. Junit time test

import org.junit.Test;
public class TestTimeOut 
{
    // Fix timeout assert in Test function below. Test fail if running 1000ms longer
    /***********************Begin**************************/
    @Test(timeout=1000)
    public void test()
     {
        int i = 0;
    	while(true)
        {
        	break;
        }
    }
    /************************End***************************/
}

3.Junit parameterized test

Related knowledge:Junit parameterized test allows you test the same test with  different parameters. Learning Junit parameterized test with five steps bellow.

  1. Annotate test class with @RunWith(Parameterized.class).
  2. Build a static method annotated by @Parameters, which retrun a set or an array of Objects as test data.
  3. Build a public construct method, which receives a parameter equals with test data.
  4. Build instance variable for every colum of test data.
  5. Build your test case with the instance as test data source.

In Junit, you can use @RunWith and @parameter to pass parameters. @RunWith:When a class annotated by @RunWith or when a class extends a base class which annotated by @RunWith,then Junit will run test through a runner pointed by the annotation.@Parameters:Add this annotation to every method if it provide data. By the way, these methods must be static, return a Collection and receive no parameter. 

import static org.junit.Assert.assertEquals; // static import
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import step1.Calculator;
/**
 * JUnit4 parameterized test
 */
@RunWith(Parameterized.class)
public class ParameterTest {
    private int input11;
    private int input22;
    private int expected;
    public ParameterTest(int input11, int input22, int expected){
        this.input11 = input11;
        this.input22 = input22;
        this.expected = expected;
    }
    @Parameters
    public static Collection prepareData(){
        /**
         *the type of the two-dimension array must be Object.
         *data in the two-dimension array is ready of test sub() in Calculator
         * every element in the two-dimension array should corresponds to position of parameters in construct method ParameterTest
         *let the third element equals the first subtract the second element according to parameters’ postion
         *fix missing codes under ‘Begin’ and above ‘End’,pass 4 groups of parameters to test sub method in Calculator is right or not 
         *tip:only two lines of codes 
         */
                    /*********************************Begin********************************************/
        Object[][] ages={{2,2,0},{0,1,-1},{0,1,-1},{3,1,2}};
		return Arrays.asList(ages);
        /**********************************End********************************************/
    }
    @Test
    public void testSub(){
        Calculator cal = new Calculator();
        assertEquals(cal.sub(input11, input22), expected);
    }
}
// Calculator.java Junit Parameterized Test
/** 
 * Mathematical Calculation  subtract
 */  
public class Calculator {  
    public int sub(int a, int b) {  
        return a - b;  
    }  
}

4.Junit Exception Test

Related knowledge:you can check codes if throw expected exception or not by using ‘expected’ attribute in @Test meta data. value of the ‘expected attribute’ is a kind of Exception, if codes throw the expected exception, then test successfully, otherwise, failed.

import static org.junit.Assert.*;

import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import step2.Person;

public class JunitException {
    /**
*add a line of annotation in Begin/End,check the age of Person Object is legal or not.     *throw IllegalArgumentException exception
    */
    /***********************************Begin***********************************/
  	@Test(expected = IllegalArgumentException.class)
  /************************************End************************************/
    public void checkage() {
    Person person = new Person();
    person.setAge(-1);
    }
}
//Person.java
public class Person {
        private String name;
        private int age;
        public String getName() {
        return name;
        }
        public void setName(String name) {
        this.name = name;
        }
        public int getAge() {
        return age;
        }
        public void setAge(int age) {
        if (age < 0 ) {
        throw new IllegalArgumentException("age is invalid");
        }
    this.age = age;
    }
}

5.Junit Suite Test

Related knowledge:Suite Test means test a couple of test cases together. Precisely speaking, Using @RunWith and @Suite.

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import step3.Calculate;
import step3.CalculateTest;
import step3.Car;
import step3.CarTest;
 
/*
add two lines of annotations. Implement Suite Test of CalculateTest and CarTest
Suite Test codes must next to Class SuiteTest, no shift allowed!
*/
//**************************************************************
@RunWith(Suite.class)
@Suite.SuiteClasses({ CalculateTest.class, CarTest.class})
public class SuiteTest {
    @Test
    public void testPrint() {
        System.out.println("The result of CalculateTest");
assertEquals(24, result);
System.out.println("The result of CarTest");
assertEquals(4, result);
    }
}
 
//Calculate.java
public class Calculate {
    public int add(int a, int b) {
        return a + b;
    }
}
 
//CalculateTest.java
public class CalculateTest {
    Calculate calculate;
    @Before
    public void setUp() throws Exception {
        calculate = new Calculate();
    }
    @Test
    public void testAdd() {
        int result = calculate.add(12, 12);
        assertEquals(24, result);
}
}
 
//CarTest.java
public class CarTest {
    Car car;
    @Before
    public void setUp() throws Exception {
        car = new Car();
    }
    @Test
    public void testGetWheels() {
        int result = car.getWheels();
        assertEquals(4, result);
    }
}
 
//Car.java
public class Car {
    public int getWheels() {
        return 4;
    }
}

 

 

 

 

 

 

 

 

...全文
169 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文深入剖析了ext4文件系统的设计理念与核心技术,揭示其作为“老将”在Linux和Android生态中持久不衰的原因。ext4继承自为机械硬盘优化的ext2/ext3家族,采用块组、位图、inode表等结构保障磁头寻道效率,并通过稀疏超级块、flex_bg等机制优化布局。其核心创新包括引入extents替代传统多级间接指针,大幅提升大文件寻址效率;支持延迟分配以降低碎片率;启用64bit模式突破容量限制。日志系统jbd2提供三种写入模式(journal/ordered/writeback),在安全性与性能间灵活权衡,确保崩溃后快速恢复。此外,ext4配备fallocate、hole punch、e4defrag等现代工具,支持稀疏文件、在线扩容与碎片整理,并通过metadata_csum增强元数据完整性检测。在Android系统中,ext4虽非userdata主文件系统,却广泛用于metadata、misc、persist等“小而关键”的分区,凭借高可靠性与成熟修复工具成为系统稳定性的基石。最后,文章通过f2fs、ext4、EROFS三者在设计初衷、写入方式、压缩能力等方面的七维对照,阐明“没有银弹”的选型心法:不同介质与负载需匹配最适合的文件系统。; 适合人群:具备一定操作系统基础知识的开发者、存储系统工程师、Android系统研发人员及对文件系统原理感兴趣的技术爱好者。; 使用场景及目标:①理解ext4为何能在闪存时代仍被广泛用于关键小分区;②掌握extents、jbd2日志、延迟分配等核心技术原理;③对比f2fs、ext4、EROFS在不同应用场景下的优劣,指导实际选型决策。; 阅读建议:此资源兼具技术深度与历史视角,建议结合姊妹篇①(Android存储架构)与②(f2fs闪存优化)对照阅读,以构建完整的文件系统认知体系。对于关键章节如日志机制与三系统对照表,建议反复研读并结合内核文档与实际命令(如tune2fs、e2fsck)进行实践验证。

183

社区成员

发帖
与我相关
我的任务
社区描述
福州大学 梅努斯国际工程学院 软件工程 教学
软件工程 高校
社区管理员
  • 单步调试
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧