• 学号20175313 《Arrays和String单元测试》第八周


    Arrays和String单元测试

    一、String类相关方法的单元测试

    测试结果截图:

    1. charAt方法测试

    • 正常情况
    • 边界情况
    • 异常情况

    测试代码:

    import junit.framework.TestCase;
    import org.junit.Test;
    
    public class testString extends TestCase {
        String s = new String("java");
        String str = new String("www.baidu.com welcome to China");
        @Test
        public void testcharAt() throws Exception{
            assertEquals('j', new String("hello java").charAt(6));//正常情况
            assertEquals('好', new String("你好 java").charAt(1));//charAt取得是一个字符不是一个字节
            assertEquals('.',new String("i can.").charAt(5));//正常情况
            assertEquals('你', new String("你好 java").charAt(0));//边界情况
            assertEquals('a',s.charAt(3));//边界情况
            //assertEquals(' ',s.charAt(-1));//异常情况
            //assertEquals(' ',s.charAt(5));//异常情况
        }
    }
    
    • 上述测试代码中两个异常情况测试结果截图:
    • 查找位置溢出
    • 查找位置小于0

    2. split方法测试

    • 正常情况
    • 边界情况
    • 异常情况

    测试代码:

    TestCase {
        String s = new String("java");
        String str = new String("www.baidu.com welcome to China");
    @Test
        public void testsplit() throws Exception{
            assertEquals("www",str.split("[.]")[0]);//正常情况
            assertEquals("www.baidu.com",str.split(" ")[0]);//正常情况
            assertEquals("",str.split("[a-z]+")[0]);//边界情况
            assertEquals(".",new String(".www.com").split("\w")[0]);//边界情况
            //assertEquals(" ",str.split(" ")[-1]);//异常情况
            //assertEquals(" ",str.split(" ")[4]);//异常情况
        }
    }
    
    • 上述测试代码中两个异常情况测试结果截图
    • 查找位置小于0
    • 查找位置溢出

    二、Arrays类相关方法的单元测试

    测试结果截图:

    1. sort方法测试

    • 正常情况
    • 边界情况
    • 异常情况

    测试代码:

    public class testArrays extends TestCase {
        String []data1 = {"1","2","5","3","4"};
        char [] data2 = {'a','z','y','c','b'};
        int data3[] = {3,6,8,2,9,0};
        @Test
        public void testSort(){
            Arrays.sort(data1);
            assertEquals("[1, 2, 3, 4, 5]",Arrays.toString(data1));
            Arrays.sort(data2);
            assertEquals("[a, b, c, y, z]",Arrays.toString(data2));
            Arrays.sort(data3,0,5);
            //使用public static void sort(int[] a,int fromIndex,int toIndex)方法排序
            assertEquals("[2, 3, 6, 8, 9, 0]",Arrays.toString(data3));
            assertEquals(0,data3[5]);
            //assertEquals(1,data3[8]);//异常情况
        }
    
    • 上述测试代码中异常情况测试结果截图

    2. binarySearch方法测试

    • 正常情况
    • 边界情况
    • 异常情况

    测试代码:

    public void testBinarySearch(){
            Arrays.sort(data1);
            assertEquals(0 ,Arrays.binarySearch(data1,"1"));//正常情况
            assertEquals(-6,Arrays.binarySearch(data1,"6"));//异常情况,要搜索的数比数组元素最大还大
            assertEquals(-1,Arrays.binarySearch(data1,"-1"));//异常情况,要搜索元素比数组元素最小还小
            Arrays.sort(data3);
            assertEquals(-4,Arrays.binarySearch(data3,4));
        }
    

    三、测试过程中遇到的问题及其解决方法

    • 问题1:对split方法的一些细节性问题掌握不到位,导致测试不通过。
    • 解决方法:认真查阅资料,对split方法的一些细节进行深入研究,得知:split()方法认为分隔符标记的左侧应该是单词,依次如果和当前String对象的字符序列的前缀和regex匹配,那么split(String regex)方法分解出的第一个单词是不含任何字符的字符序列,即“”。
    • 经过修改后,测试代码截图如下:
    • 问题2:字符串数组不能直接用toString输出,采用toString输出的是该数组的引用。
    • 解决方法:采用Arrays类的toString方法将字符串数组转化为字符串输出。
    • 经过修改后,测试代码截图如下:
    • 问题3:进行二分搜索时,未现将该数列进行排序,导致结果出错。
    • 解决方法:现将该数列进行排序后再进行二分搜索。
    • 经过修改后,测试代码截图如下:

    注意⚠️使用binarySearch搜索时:

    • 当搜索元素是数组元素,则返回该元素的索引值
    • 如果不是数组元素,则返回 - (索引值 + 1)
    • binarySearch源代码截图如下:

    四、码云链接

    五、参考资料

  • 相关阅读:
    编程题#2: 魔兽世界之二:装备
    程序设计实习MOOC / 继承和派生——编程作业 第五周程序填空题1
    【转】C++动态创建二维数组,二维数组指针
    HDU-2571命运
    HDU-1203 I NEED A OFFER!
    HDU-1003 Max Sum
    HDU2196-Computer
    HDU-1520 Anniversary party
    ChineseHelper(获取汉字字符串的首拼)
    车牌号正则表达式(新能源车牌)
  • 原文地址:https://www.cnblogs.com/xiannvyeye/p/10727136.html
Copyright © 2020-2023  润新知