zoukankan      html  css  js  c++  java
  • Xcode单元测试实战演练

    Xcode单元测试实战演练

    0题目背景


    问题: 给定n个整数(可能为负数)组成的序a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n

    例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
    -- 引用自《百度百科》

    1程序


    根据题目背景,我先写出了能实现的C语言程序,但我进行单元测试是用的Xcode软件,所以将我的程序转化为了Objective-C语言,并且是在工程里实现的,(我试着单写了一个类,但Xcode似乎不可以对OC类文件进行测试,每次都是Build failed,网上也查不到解决方案,在此希望有经验的大佬点拨一下)工程测试这个小程序还是绰绰有余的,废话不多说,先奉上代码地址:

    最大子段和C语言程序GitHub地址

    最大子段和Xcode单元测试工程GitHub地址

    //最大字段和函数
    - (int)setNum:(int)num setArray:(NSArray *)array{
        int sum = 0,max = 0;
        for (int i = 0; i < num; i++) {
            for (int j = i; j < num; j++) {
                sum = sum + [array[j] intValue];
                if (max < sum)
                    max = sum;
            }
            sum = 0;
        }
        return max;
    }
    
    

    程序流程图

    2白盒测试


    白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:

    1.语句覆盖每条语句至少执行一次。

    2.判定覆盖每个判定的每个分支至少执行一次。

    3.条件覆盖每个判定的每个条件应取到各种可能的值。

    4.判定/条件覆盖同时满足判定覆盖条件覆盖。

    5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

    6.路径覆盖使程序中每一条可能的路径至少执行一次。

    3设计测试用例


    判定/条件组合覆盖对该代码设计测试用例,针对判定中的条件取值,对流程图进行分析可得所有路径组合覆盖条件

    测试用例 期待值 选择路径
    {-2,11,-4,13,-5,-2} 20 acfceb
    {-2,-5,-2,-4} 0 aceb
    {-2,4,6,4} 14 acfdb
    {2,4,6,-5} 12 adb

    根据多组测试数据封装成一个数组,进行参数化测试,节省人力时间。

    \\测试函数
    - (void)testExample {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
        NSArray *arr = [NSMutableArray arrayWithArray:@[
                                                         @[@"-2",@"11",@"-4",@"13",@"-5",@"-2"],
                                                         @[@"-2",@"-5",@"-2",@"-4"],
                                                         @[@"-2",@"4",@"6",@"4"],
                                                         @[@"2",@"4",@"6",@"-5"]
                                                         ]];
        int a[4] = {20,0,14,12};
        int num[4] = {6,4,4,4};
        for (int i = 0; i < [arr count]; i++) {
            int sum = [self.vc setNum:num[i] setArray:arr[i]];
            XCTAssertEqual(sum, a[i],@"函数错误,测试不成功");
        }
    
    }
    

    4测试结果


    5总结


    自己的程序时间复杂度大,看到了别的同学的时间复杂度为O(n)的程序,也更加认识到学无止境,继续努力。

  • 相关阅读:
    【Anagrams】 cpp
    【Count and Say】cpp
    【Roman To Integer】cpp
    【Integer To Roman】cpp
    【Valid Number】cpp
    重构之 实体与引用 逻辑实体 逻辑存在的形式 可引用逻辑实体 不可引用逻辑实体 散弹式修改
    Maven项目聚合 jar包锁定 依赖传递 私服
    Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
    mysql案例~tcpdump的使用
    tidb架构~本地化安装
  • 原文地址:https://www.cnblogs.com/stupiderman/p/8678374.html
Copyright © 2011-2022 走看看