2023年山东省职业院校技能大赛高职组 “软件测试”赛项竞赛任务四 单元测试 试题分析
我是小白,请各位大佬发表自己的看法
题目1:
题目1:任意输入2个正整数值分别存入x、y中,据此完成下述分析:若x≤0或y≤0,则提示:“输入不符合要求。”;若2值相同,则提示“可以构建圆形或正方形”;若2<|x-y|≤5,则提示“可以构建椭圆”;若|x-y|>5,则提示“可以构建矩形”;若0<|x-y|≤2,提示“可以构建长方形”。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足语句覆盖测试,每条测试数据需要在测试类中编写一个测试方法。使用assertEquals判断输入数据测试方法期望结果值和实际返回值是否一致。
我们对题目进行拆分,
得到需求:
1)任意输入2个正整数值分别存入x、y中
2)若x≤0或y≤0,则提示:“输入不符合要求。”;
3)若2值相同,则提示“可以构建圆形或正方形”;
4)若2<|x-y|≤5,则提示“可以构建椭圆”;
5)若|x-y|>5,则提示“可以构建矩形”;
6)若0<|x-y|≤2,提示“可以构建长方形”
下一步对针对需求编写java代码
得到主方法:
public static String method(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 if(Math.abs(x-y)>0 && Math.abs(x-y)<=2) {
return "可以构建长方形";
}else {
return null; // 无可能走到这里
}
}
这样我们就可以进行正常单元测试分析了:
得到5个需求对于的用例
//若x≤0或y≤0,则提示:“输入不符合要求。”;
@Test
public void test01() {
String result = method(-1,-1);
Assert.assertEquals("输入不符合要求。", result);
}
//若2值相同,则提示“可以构建圆形或正方形”;
@Test
public void test02() {
String result = method(1,1);
Assert.assertEquals("可以构建圆形或正方形", result);
}
//若2<|x-y|≤5,则提示“可以构建椭圆”;
@Test
public void test03() {
String result = method(5,1);
Assert.assertEquals("可以构建椭圆", result);
}
//若|x-y|>5,则提示“可以构建矩形”;
@Test
public void test04() {
String result = method(7,1);
Assert.assertEquals("可以构建矩形", result);
}
//若0<|x-y|≤2,提示“可以构建长方形”
@Test
public void test05() {
String result = method(3,1);
Assert.assertEquals("可以构建长方形", result);
}
题目2:
题目2: 输入一个大写字母一个小写字母。根据输入的第一个字母和周几英文单词的第一个大写字母判断是周几,如果无法根据第一个大写字母判断,则继续根据输入的第二个小写字母进行判断,最终返回正确的英文周几的单词。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足语句覆盖测试,每条测试数据需要在测试类中编写一个测试方法。使用assertEquals判断期望结果值和实际返回值是否一致。
我们对题目进行拆分,
得到需求:
1)输入一个大写字母一个小写字母。
2)根据输入的第一个字母和周几英文单词的第一个大写字母判断是周几,如果无法根据第一个大写字母判断,
3)则继续根据输入的第二个小写字母进行判断,最终返回正确的英文周几的单词。
在此提供相关英文单词
Monday(星期一)
Tuesday(星期二)
Wednesday(星期三)
Thursday(星期四)
Friday(星期五)
Saturday(星期六)
Sunday(星期日)
下一步对针对需求编写java代码
得到主方法:
public static String getDay(char f, char s) {
if (f == 'M') {
return "Monday";
} else if (f == 'W') {
return "Wednesday";
} else if (f == 'F') {
return "Friday";
} else if (f == 'T' && s == 'u') {
return "Tuesday";
} else if (f == 'T' && s == 'h') {
return "Thursday";
} else if (f == 'S' && s == 'a') {
return "Saturday";
} else if (f == 'S' && s == 'u') {
return "Sunday";
} else {
return "Invalid day"; // 如果没有匹配的情况,返回无效信息
}
}
进行正常单元测试分析了:
得到8个需求对于的用例
@Test
public void test01() {
Assert.assertEquals("Monday", getDay('M','h'));
}
@Test
public void test02() {
Assert.assertEquals("Wednesday", getDay('W','h'));
}
@Test
public void test03() {
Assert.assertEquals("Friday", getDay('F','h'));
}
@Test
public void test04() {
Assert.assertEquals("Tuesday", getDay('T','u'));
}
@Test
public void test05() {
Assert.assertEquals("Thursday", getDay('T','h'));
}
@Test
public void test06() {
Assert.assertEquals("Saturday", getDay('S','a'));
}
@Test
public void test07() {
Assert.assertEquals("Sunday", getDay('S','u'));
}
@Test
public void test08() {
Assert.assertEquals("Invalid day", getDay('a','h'));
}
题目3:
题目3:题目3:进行系统注册时通常需要输入用户名和密码,其中用户名要求由8个字母组成、密码由6个(含6)以上数字组成。满足要求,则提示“注册成功”,否则根据实际情况提示“**不符合要求”(**为用户名或密码)。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足语句覆盖测试,每条测试数据需要在测试类中编写一个测试方法。使用assertThat中containsString断言判断输出文字期望结果值和实际返回值是否一致。(这里我用的是assertequals)
我们对题目进行拆分,
得到需求:
1)输入用户名和密码,
2)其中用户名要求由8个字母组成、密码由6个(含6)以上数字组成。满足要求,则提示“注册成功”
3)否则根据实际情况提示“**不符合要求”(**为用户名或密码)
下一步对针对需求编写java代码
得到主方法:
public static String method(String userName,String passWord) {
char[] chararray =userName.toCharArray();
int count = 0;
for(int i =0;i<chararray.length;i++) {
if(Character.isLetter(chararray[i])) {
count++;
}
}
char[] chararray01 =passWord.toCharArray();
int count01 = 0;
for(int i =0;i<chararray01.length;i++) {
if(Character.isDigit(chararray01[i])) {
count01++;
}
}
if(count==8 && count01>=6) {
return "注册成功";
}else if(count!=8) {
return "用户名不符合要求";
}else if(count01<6) {
return "密码不符合要求";
}else {
return null; //运行不到此
}
}
进行正常单元测试分析了:
得到3个需求对于的用例
@Test
public void test01() {
String result= method("abllllll","123456");
Assert.assertEquals("注册成功", result);
}
@Test
public void test02() {
String result= method("abllll","123456");
Assert.assertEquals("用户名不符合要求", result);
}
@Test
public void test03() {
String result= method("abllllll","1234");
Assert.assertEquals("密码不符合要求", result);
}
题目4:
题目4:输入小写的字符串。如字符串前缀为ab开头,则将前缀ab替换为ef并打印出替换后字符串,返回文字“替换前缀后的字符串为:”和替换后字符串值;如后缀为cd并且前缀不为ab,替换字符串中所有cd为gh并打印出替换后字符串,返回文字“替换cd后的字符串为:”和替换后字符串值;否则全部字母大写输出,返回文字“大写字母的字符串为:”和转换后的字符串值。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足条件覆盖测试,测试类使用参数化测试(@Parameters)完成测试。使用assertEquals判断期望结果值和实际返回值是否一致。
我们对题目进行拆分,
得到需求:
1)输入小写的字符串。
2)如字符串前缀为ab开头,则将前缀ab替换为ef并打印出替换后字符串,返回文字“替换前缀后的字符串为:”和替换后字符串值;
3)如后缀为cd并且前缀不为ab,替换字符串中所有cd为gh并打印出替换后字符串,返回文字“替换cd后的字符串为:”和替换后字符串值;
4)否则全部字母大写输出,返回文字“大写字母的字符串为:”和转换后的字符串值。
下一步对针对需求编写java代码
由于设计到参数化,所有这里直接提供了整个类
package cn.lanqiao;
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;
@RunWith(Parameterized.class)
public class Test05 {
/*
1)输入小写的字符串。
2)如字符串前缀为ab开头,则将前缀ab替换为ef并打印出替换后字符串,返回文字“替换前缀后的字符串为:”和替换后字符串值;
3)如后缀为cd并且前缀不为ab,替换字符串中所有cd为gh并打印出替换后字符串,返回文字“替换cd后的字符串为:”和替换后字符串值;
4)否则全部字母大写输出,返回文字“大写字母的字符串为:”和转换后的字符串值。
*/
private String le;
private String msg;
public Test05 (String le,String msg) {
this.le=le;
this.msg=msg;
}
@Parameterized.Parameters
public static Collection par() {
return Arrays.asList(new Object[][] {
{"abcd","替换前缀后的字符串为:efcd"},
{"bccd","替换cd后的字符串为:bcgh"},
{"pop","大写字母的字符串为:POP"}
});
}
public String method() {
if(le.indexOf("ab")==0) {
le = le.replace("ab", "ef");
return "替换前缀后的字符串为:"+le;
}else if(le.lastIndexOf("cd")!=-1) {
le = le.replace("cd", "gh");
return "替换cd后的字符串为:"+le;
}else {
le = le.toUpperCase();
return "大写字母的字符串为:"+le;
}
}
@Test
public void test() {
String actual = method();
Assert.assertEquals(msg, actual);
}
}