麻瓜好卷

  • 首页
  • 编程
    • iOS
    • Python
    • Java
麻瓜好卷
重新启航~
  1. 首页
  2. 编程
  3. Java
  4. 正文

单元测试-2023年全国技能大赛软件测试赛项

2023年 12月 23日

说在前面:

去年参加了安徽省高职院校技能大赛软件测试赛项,今年继续参加。比较网络相关资料后,做出一些题目备份。

编写前准备:先导入jar包,hamcrest-core-1.3.jar, hamcarest-library-1.3.jar, junit-4.13.2.jar.

第一题

任意输入2个正整数值分别存入x、y中,据此完成下述分析:若x≤0或y≤0,则提示:“输入不符合要求。”;若2值相同,则提示“可以构建圆形或正方形”;若2<|x-y|≤5,则提示“可以构建椭圆”;若|x-y|>5,则提示“可以构建矩形”;若0<|x-y|≤2,提示“可以构建长方形”。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足语句覆盖测试,每条测试数据需要在测试类中编写一个测试方法。使用assertEquals判断输入数据测试方法期望结果值和实际返回值是否一致。

分析:①使用Java语言编写相关代码;②测试用例设计满足语句覆盖的要求;③使用 assertEquals 断言判断期望与结果

①使用Java语言编写代码

package Junittest;

public class test01 {

	public static String cal(int x, int y) {
		if ( x <=0 || y <=0 ) {
			return "输入不符合要求";
		} else if (x == y) {
			return "可以构成圆形或者正方形";
		} else if (Math.abs(x - y) > 2 && Math.abs(x - y) <= 5) {
			return "可以构成椭圆";
		} else if (Math.abs(x - y) > 5) {
			return "可以构成矩形";
		} else {
			return "可以构成长方形";
		}
	}
}

②测试用例设计满足语句覆盖的要求

测试用例设计如下
测试用例1:x=2,y=-1
测试用例2:x=2,y=2
测试用例3:x=5,y=2
测试用例4:x=5,y=11
测试用例5:x=5,y=4

③使用 assertEquals 断言判断期望与结果

package Junittest;

import org.junit.Assert;
import org.junit.Test;


public class test01Test {

	@Test
	public void test1() {
		Assert.assertEquals("输入不符合要求", test01.cal(2, -1));
	}
	
	@Test
	public void test2() {
		Assert.assertEquals("可以构成圆形或者正方形", test01.cal(2, 2));
	}
	
	@Test
	public void test3() {
		Assert.assertEquals("可以构成椭圆", test01.cal(5, 2));
	}
	
	@Test
	public void test4() {
		Assert.assertEquals("可以构成矩形", test01.cal(5, 11));
	}
	
	@Test
	public void test5() {
		Assert.assertEquals("可以构成长方形", test01.cal(5, 4));
	}

}

第二题

根据输入的年份和月份判断月份的天数。若月份不在有效范围之内,应提示:“月份输入不正确。”。月份不为2月,根据输入月份输出对应的月份天数。月份为2月,根据年份判断如为普通闰年,输出2月份正确天数;如为世纪闰年,输出2月份正确天数;不为闰年输出2月份天数。返回结果格式:“year年month月份的天数是days天。”year、month为传入的值,days为判断得到的天数值。其中变量year、month均须为正整数。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足语句覆盖测试,每条测试数据需要在测试类中编写一个测试方法。使用assertThat中equalTo断言判断返回期望结果和实际返回是否一致。

分析:①使用Java语言编写相关代码;②测试用例设计满足语句覆盖的要求;③使用 assertThat中equalTo 断言判断期望与结果

①使用Java语言编写代码

package Junittest;

import java.text.MessageFormat;
import java.util.Map;
import java.util.HashMap;

public class test02 {
	
	private static Map<Integer, Integer> monthDaysMap = new HashMap<Integer, Integer>() {
		{
			put(1, 31);
			put(3, 31);
			put(5, 31);
			put(7, 31);
			put(8, 31);
			put(10, 31);
			put(12, 31);
			put(2, 28);
			put(4, 30);
			put(6, 30);
			put(9, 30);
			put(11, 30);
		}
	};
	
	public static String cal(int year, int month) {
		if(!monthDaysMap.containsKey(month)) {
			return "月份输入不正确";
		}
		if (month == 2) {
			if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) {
				return MessageFormat.format("{0,number,#}年{1}月份的天数是{2}天", year, month, 29);
			} else {
				return MessageFormat.format("{0,number,#}年{1}月份的天数是{2}天", year, month, 28);
			}
		} else {
			return MessageFormat.format("{0,number,#}年{1}月份的天数是{2}天", year, month, monthDaysMap.get(month));
		}
	}
}

②测试用例设计满足语句覆盖的要求

测试用例设计如下
测试用例1:year=2000,month=15
测试用例2:year=2000,month=1
测试用例3:year=2000,month=2
测试用例4:year=2001,month=2

③使用 assertThat中equalTo 断言判断期望与结果

package Junittest;

import org.junit.Test;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
public class test02Test {

	@Test
	public void test1() {
		MatcherAssert.assertThat(test02.cal(2000, 15), Matchers.equalTo("月份输入不正确"));
	}
	
	@Test
	public void test2() {
		MatcherAssert.assertThat(test02.cal(2000, 1), Matchers.equalTo("2000年1月份的天数是31天"));
	}
	
	@Test
	public void test3() {
		MatcherAssert.assertThat(test02.cal(2000, 2), Matchers.equalTo("2000年2月份的天数是29天"));
	}
	
	@Test
	public void test4() {
		MatcherAssert.assertThat(test02.cal(2001, 2), Matchers.equalTo("2001年2月份的天数是28天"));
	}

}

第三题

邮箱注册需要填写邮箱地址和密码。其中要求邮箱格式“登录名@主机名.域名”,登录名为5个字母,主机名固定为下面2个163、126,域名为com或com.cn。密码为6个(含6)以上数字组成。填写正确则提示“信息正确”,否则根据实际情况提示“**不符合要求”(**为邮箱地址或密码)。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足语句覆盖测试,每条测试数据需要在测试类中编写一个测试方法。使用assertThat中equalTo断言判断输出文字期望结果值和实际返回值是否一致。

分析:①使用Java语言编写相关代码;②测试用例设计满足语句覆盖的要求;③使用 assertThat中equalTo 断言判断期望与结果

①使用Java语言编写代码

package Junittest;

public class test3 {
	
	public static String reg(String email, String psd) {
		boolean emailCheck = email.matches("[a-zA-Z]{5}@(163|162)\\.com(\\.cn)?");
		boolean psdCheck = psd.matches("\\d{6,}");
		
		if (emailCheck && psdCheck) {
			return "信息正确";
		} else if (emailCheck && !psdCheck){
			return "密码不符合要求";
		} else if (!emailCheck && psdCheck) {
			return "邮箱地址不符合要求";
		} else {
			return "密码,邮箱地址不符合要求";
		}
		
	}

}

②测试用例设计满足语句覆盖的要求

测试用例设计如下
测试用例1:email=abcde@163.com,password=123456
测试用例2:email=abcde@163.com,password=12345
测试用例3:email=abcde@163.co,password=123456
测试用例4:email=abcde@163.co,password=12345

③使用 assertThat中equalTo 断言判断期望与结果

package Junittest;

import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.Test;

public class test3Test {

	@Test
	public void testRegister01() {
		MatcherAssert.assertThat(test3.reg("abcde@163.com", "123456"), Matchers.equalTo("信息正确"));
	}

	@Test
	public void testRegister02() {
		MatcherAssert.assertThat(test3.reg("abcde@163.com", "12345"), Matchers.equalTo("密码不符合要求"));
	}

	@Test
	public void testRegister03() {
		MatcherAssert.assertThat(test3.reg("abcde@163.co", "123456"),Matchers.equalTo("邮箱地址不符合要求"));
	}

	@Test
	public void testRegister04() {
		MatcherAssert.assertThat(test3.reg("abcde@163.co", "12345"),Matchers.equalTo("密码,邮箱地址不符合要求"));
	}

}

第四题

输入小写的字符串。如字符串前缀为ab开头,则将前缀ab替换为ef并打印出替换后字符串,返回文字“替换前缀后的字符串为:”和替换后字符串值;如后缀为cd并且前缀不为ab,替换字符串中所有cd为gh并打印出替换后字符串,返回文字“替换cd后的字符串为:”和替换后字符串值;否则全部字母大写输出,返回文字“大写字母的字符串为:”和转换后的字符串值。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足条件覆盖测试,测试类使用参数化测试(@Parameters)完成测试。使用assertEquals判断期望结果值和实际返回值是否一致。

分析:① 使用 Java 语言编写代码,② 测试用例设计满足语句覆盖的要求,③ 使用 @Parameters 进行参数化测试,使用 assertEquals 断言判断期望与结果。

①使用Java语言编写代码

package Junittest;

public class test4 {
	public static String changeStr(String str) {
		if (str.matches("ab.*")) {
			return "替换前缀后的字符串为:".concat(str.replaceFirst("ab", "ef"));
		} else if (str.matches(".*cd")) {
			return "替换cd后的字符串为:".concat(str.replaceFirst("cd", "gh"));
		} else {
			return "大写字母的字符串为:".concat(str.toUpperCase());
		}
	}
}

② 测试用例设计满足语句覆盖的要求

测试用例设计如下
测试用例1:str=abff
测试用例2:str=ffcd
测试用例3:str=ffff

③ 使用 @Parameters 进行参数化测试,使用 assertEquals 断言判断期望与结果。

package Junittest;

import java.util.Arrays;
import java.util.Collection;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class test4Test {

	@Parameter(0)
	public static String string;
	
	@Parameter(1)
	public static String resultString;
	
	@Parameters
	public static Collection<Object[]> data(){
		
		return Arrays.asList(new Object[][] {
			{ "abff", "替换前缀后的字符串为:efff" },
			{ "ffcd", "替换cd后的字符串为:ffgh" },
			{ "ffff", "大写字母的字符串为:FFFF" },
		});
		
	}
	
	@Test
	public void test() {
		Assert.assertEquals(resultString, test4.changeStr(string));
	}

}

国赛四道题的备份到这里结束,等待更新。

标签: Java 单元测试 技能大赛 软件测试
最后更新:2023年 12月 23日

MuggleRollAdmin

这个人很懒,什么都没留下

< 上一篇
文章目录
  • 第一题
  • 第二题
  • 第三题
  • 第四题

COPYRIGHT © 2021-2024 麻瓜好卷. ALL RIGHTS RESERVED.

本站支持IPv6访问

Theme Kratos Made By Seaton Jiang

浙ICP备2021014039号-1

浙公网安备 33038102332002号