测试方法
使用Junit和 @Test、@Before、@After、@BeforeClass、@AfterClass用法,并结合黑盒测试方法进行程序测试。
实战题目
1.实现函数String NewDivision(String innumber),输入一个字符串包含两个数字,用逗号分隔,例如“123,234”,“11.1,2”。对字符串进行解析,返回两个数相除结果。输入数字可以是整数或者小数,并且程序可以对非法输入进行处理和识别,例如输入一个数,没有逗号,输入非数字等。
2.编写函数,RightDate(String date),date表示日期,包含年月日(个位数月份前加0,如,4月->04),例如“19870411”、“20201211”。RightDate函数用来判别输入日期是否正确,合法输入年份范围[1987,2021]。假定被调试的程序能接受一切符合规定的日期,拒绝所有不符合规定的日期。
题目分析
对于问题1,需要从字符串的长短和内容进行判断,字符串长短较为容易,而字符串内容可根据题目特点来,即该字符串最大特点为以逗号分隔两个数字,先解决数字问题,数字可分小数或者整数,可用正则表达式进行判断,再解决逗号问题,直接判断字符串中逗号的个数比较der,可通过split(",")后字符串的个数以及字符串的内容是否为null进行解决。最后,从业务要求分析,该题为除法运算,自然还有除数为零这个问题。
对于问题2,延续第一题的分析方法,从字符串的长短和内容进行判断。内容方面,首先是字符方面,该字符串应当全是整数,用正则较为方便,其次该题是日期,分为年、月、日。将这三者进行排列组合逐步排查,单个排查,自然是从时间范围,双个排查,月和日有着31天的问题,三个排查,有着闰年二月二十九日问题。
代码模块
第一题
package JunitTest1; import java.util.regex.Pattern; //1. 实现函数String NewDivision(String innumber), // 输入一个字符串包含两个数字,用逗号分隔,例如“123,234”,“11.1,2”。对字符串进行解析, // 返回两个数相除结果。输入数字可以是整数或者小数, // 并且程序可以对非法输入进行处理和识别, // 例如输入一个数,没有逗号,输入非数字等。 public class NewDivision { public String division(String s){ Pattern pattern1 = Pattern.compile("^[-\\+]?[\\d]*$"); Pattern pattern2 = Pattern.compile("^[-\\+]?\\d*[.]\\d+$"); String f[]=s.split(","); if(f.length!=2){return "字符输入错误";} if (f[0]==null||"".equals(f[0])||f[1]==null||"".equals(f[1])) { return "字符输入错误"; } if(!((pattern1.matcher(f[0]).matches()||pattern2.matcher(f[1]).matches())&& (pattern1.matcher(f[1]).matches()||pattern2.matcher(f[1]).matches()))) { return "字符输入错误"; } double d1=Double.parseDouble(f[0]); double d2=Double.parseDouble(f[1]); System.out.println(d2); if(d2==0.0||d2==0){return "除数为零";} return String.valueOf(d1/d2); } }
package JunitTest1; import static org.junit.Assert.*; import org.junit.*; public class TestNewDivision { @BeforeClass public static void setUpBeforeClass() throws Exception { System.out.println("this is beforeclass"); } @AfterClass public static void tearDownAfterClass() throws Exception { System.out.println("this is afterclass"); } @Before public void setUp() throws Exception { System.out.println("this is before"); } @After public void tearDown() throws Exception { System.out.println("this is after"); } @Test public void testdivision1() { assertEquals("字符输入错误", new NewDivision().division("256")); System.out.println("测试成功!"); } @Test public void testdivision2() { assertEquals("字符输入错误", new NewDivision().division("854,")); System.out.println("测试成功!"); } @Test public void testdivision3() { assertEquals("字符输入错误", new NewDivision().division(",458.5")); System.out.println("测试成功!"); } @Test public void testdivision4() { assertEquals("字符输入错误", new NewDivision().division("452.4,451,42")); System.out.println("测试成功!"); } @Test public void testdivision5() { assertEquals("字符输入错误", new NewDivision().division("452.4,452.0.0")); System.out.println("测试成功!"); } @Test public void testdivision6() { assertEquals("除数为零", new NewDivision().division("2.0,0.0")); System.out.println("测试成功!"); } @Test public void testdivision7() { assertEquals("0.0", new NewDivision().division("0,885.5")); System.out.println("测试成功!"); } }
第二题
package JunitTest1; import java.util.regex.Pattern; //2. 编写函数,RightDate(String date),date表示日期, // 包含年月日(个位数月份前加0,如,4月->04), // 例如“19870411”、“20201211”。 // RightDate函数用来判别输入日期是否正确,合法输入年份范围[1987,2021]。 // 假定被调试的程序能接受一切符合规定的日期,拒绝所有不符合规定的日期。 public class RightDate { public boolean runnian(int x){ if ((x%4==0 && x%100!=0)||(x%400==0)) return true; else return false; } public String rightDate(String s){ Pattern pattern = Pattern.compile("[0-9]*"); if(s.length()!=8||(!pattern.matcher(s).matches())){ return "日期格式不规范--请检查日期符号"; } int year=Integer.parseInt(s.substring(0,4)); int month=Integer.parseInt(s.substring(4,6)); int day=Integer.parseInt(s.substring(6,8)); if(year<1987||year>2020) { return "日期格式不规范--请检查年范围"; } if (month>12||month==0){ return "日期格式不规范--请检查月范围"; } if ((day>=31||day==0)||((month==4||month==6||month==9||month==11)&&(day==31))){ return "日期格式不规范--请检查日范围"; } if(month==2&&day==29&&(!runnian(year))){ return "日期格式不规范--请检查是否是闰年";} return "日期规范!"; } public static void main(String argc[]){ RightDate r1=new RightDate(); System.out.println("20201310".substring(0,4)); System.out.println(r1.rightDate("20201310")); } }
package JunitTest1; import static org.junit.Assert.*; import org.junit.*; public class TestRigthDate { @BeforeClass public static void setUpBeforeClass() throws Exception { System.out.println("this is beforeclass"); } @AfterClass public static void tearDownAfterClass() throws Exception { System.out.println("this is afterclass"); } @Before public void setUp() throws Exception { System.out.println("this is before"); } @After public void tearDown() throws Exception { System.out.println("this is after"); } @Test public void testrightDay1() { assertEquals("日期格式不规范--请检查日期符号",new RightDate().rightDate("202012120000000")); System.out.println("测试成功!"); } @Test public void testrightDay2() { assertEquals("日期格式不规范--请检查年范围",new RightDate().rightDate("20211210")); System.out.println("测试成功!"); } @Test public void testrightDay3() { assertEquals("日期格式不规范--请检查月范围",new RightDate().rightDate("20201310")); System.out.println("测试成功!"); } @Test public void testrightDay4() { assertEquals("日期格式不规范--请检查月范围",new RightDate().rightDate("20201431")); System.out.println("测试成功!"); } @Test public void testrightDay5() { assertEquals("日期格式不规范--请检查日范围",new RightDate().rightDate("20200432")); System.out.println("测试成功!"); } @Test public void testrightDay6() { assertEquals("日期格式不规范--请检查是否是闰年",new RightDate().rightDate("19950229")); System.out.println("测试成功!"); } @Test public void testrightDay7() { assertEquals("日期格式不规范--请检查日期符号",new RightDate().rightDate("2020****")); System.out.println("测试成功!"); } @Test public void testrightDay8() { assertEquals("日期规范!",new RightDate().rightDate("20201212")); System.out.println("测试成功!"); } }
测试结果
编辑
编辑