20160922-四则运算单元测试

对结对项目四则运算进行单元测试,使用工具是vs2015中的MS Test。

代码及单元测试代码版本控制:

HTTPS:https://git.coding.net/li_yuhuan/CalculateTest.git

SSH:[email protected]:li_yuhuan/CalculateTest.git

GIT:git://git.coding.net/li_yuhuan/CalculateTest.git

单元测试:

1.判断字符串是否是数字

输入1:

"sd13d"

期待输出1:

false

输入2:

123.456

期待输出2:

true

(1)对应单元代码片段

        static public bool IsNumberic(string str)
        {
            Regex reg = new System.Text.RegularExpressions.Regex(@"^[-\+]?(([1-9]{1}[1-9]*)|([0]))(\.\d+)?$");
            return reg.IsMatch(str);
        }

(2)对应测试用例代码

        [TestMethod()]
        public void IsNumbericTest()
        {
            string input;
            bool expected;
            bool actual;

            //test1
            input = "sd13d";
            expected = false;
            actual = Program.IsNumberic(input);
            Assert.AreEqual(expected, actual);

            //test2
            input = "123.456";
            expected = true;
            actual = Program.IsNumberic(input);
            Assert.AreEqual(expected, actual);
        }

2.判断是否为运算符

输入1:

"2"

期待输出1:

false;

输入2:

"+"

期待输出2:

true;

(1)对应单元代码片段

        static public bool isOperateors(string input)
        {
            if (input == "+" || input == "-" || input == "*" || input == "/"
                || input == "(" || input == ")" || input == "#")
            {
                return true;
            }
            else
            {
                return false;
            }
        }

(2)对应测试用例代码

        [TestMethod()]
        public void isOperateorsTest()
        {
            string input;
            bool expected;
            bool actual;

            //test1
            input = "2";
            expected = false;
            actual = Program.isOperateors(input);
            Assert.AreEqual(expected, actual);

            //test2
            input = "+";
            expected = true;
            actual = Program.isOperateors(input);
            Assert.AreEqual(expected, actual);
        }

3.根据运算符优先级表返回运算符的优先级

输入:

3,2

期待输出:

1

(1)对应单元代码片段

        public static int[,] m_priorityTable = new int[,]
        {
          /*行为入栈运算符,列为栈顶运算符,2表示等于号,1表示大于号,
           0表示小于号,-1表示错误的匹配*/
          //////* ‘+‘,‘-‘,‘*‘,‘/‘,‘(‘,‘)‘,‘#‘*/
          /*‘+‘*/{ 1,  1,  0,  0,  0,  1,  1},
          /*‘-‘*/{ 1,  1,  0,  0,  0,  1,  1},
          /*‘*‘*/{ 1,  1,  1,  1,  0,  1,  1},
          /*‘/‘*/{ 1,  1,  1,  1,  0,  1,  1},
          /*‘(‘*/{ 0,  0,  0,  0,  0,  2, -1},
          /*‘)‘*/{ 0,  0,  0,  0, -1,  1,  1},
          /*‘#‘*/{ 0,  0,  0,  0,  0, -1,  2},
        };
        public static int IsPriority(int stackTop, int inputOperator)
        {
            return m_priorityTable[stackTop, inputOperator];
        }

(2)对应测试用例代码

        [TestMethod()]
        public void IsPriorityTest()
        {
            int input1;
            int input2;
            int expected;
            int actual;

            //test1
            input1 = 3;
            input2 = 2;
            expected = 1;
            actual = Program.IsPriority(input1, input2);
            Assert.AreEqual(expected, actual);
        }

4.判断一个字符串是否为正整数

输入1:

"-1"

期待输出1:

false

输入2:

"3"

期待输出2:

true

(1)对应单元代码片段

        static public bool IsPositiveInt(string str)
        {
            Regex reg1 = new Regex(@"^[1-9]\d*$");
            return reg1.IsMatch(str);
        }

(2)对应测试用例代码

        [TestMethod()]
        public void IsPositiveIntTest()
        {
            string input;
            bool expected;
            bool actual;

            //test1
            input = "-1";
            expected = false;
            actual = Program.IsPositiveInt(input);
            Assert.AreEqual(expected, actual);

            //test1
            input = "3";
            expected = true;
            actual = Program.IsPositiveInt(input);
            Assert.AreEqual(expected, actual);
        }

5.将表达式分割后存入队列

输入:

"(0/2)+4+4"

期待输出:

{ "(", "0", "/", "2", ")", "+", "4", "+", "4" }

(1)对应单元代码片段、

        static public Queue<string> SplitExpress(string express)
        {
            express += "#";

            Queue<string> q = new Queue<string>();
            string tempNum = string.Empty;
            char[] arryExpress = express.ToArray<char>();
            int i = 0;
            int j = 0;

            while (j < express.Length)
            {
                if (isOperateors(arryExpress[j].ToString()))
                {
                    if (i != j)
                    {
                        tempNum = express.Substring(i, j - i);
                        q.Enqueue(tempNum);
                        q.Enqueue(arryExpress[j].ToString());
                        i = j + 1;
                    }
                    else
                    {
                        q.Enqueue(arryExpress[j].ToString());
                        i++;
                    }
                }

                j++;
            }
            //q.Enqueue("#");
            return q;
        }

(2)对应测试用例代码

        public void SplitExpressTest()
        {
            string input;
            Queue<string> expected;
            Queue<string> actual;

            //test
            input = "(0/2)+4+4";
            expected = new Queue<string>();
            expected.Enqueue("(");
            expected.Enqueue("0");
            expected.Enqueue("/");
            expected.Enqueue("2");
            expected.Enqueue(")");
            expected.Enqueue("+");
            expected.Enqueue("4");
            expected.Enqueue("+");
            expected.Enqueue("4");
            expected.Enqueue("#");

            actual = Program.SplitExpress(input);
            CollectionAssert.AreEqual(expected, actual);
        }

6.将中缀表达式转换为后缀续表达式

输入:

{ "0", "-", "(", "7", "/", "2", ")", "+", "4", "#" }

期待输出:

{ "0", "7", "2", "/", "-", "4", "+" }

(1)对应单元代码片段

        static public List<string> InorderToPostorder(Queue<string> q)
        {
            List<string> posterOrder = new List<string>();
            Stack<string> inOrder = new Stack<string>();
            inOrder.Push("#");
            int count = q.Count;

            for (int i = 0; i < count; i++)
            {
                string item = q.Dequeue();

                if (isOperateors(item))
                {
                    string m = inOrder.First();
                    int n = IsPriority(m_dicOperators[inOrder.First()],m_dicOperators[item]);

                    while (1 == n)
                    {
                        string temp = inOrder.Pop();

                        if (temp != "(" && temp != ")")
                        {
                            posterOrder.Add(temp);
                        }

                        n = IsPriority(m_dicOperators[inOrder.First()],
                        m_dicOperators[item]);
                    }

                    if (2 == n)
                    {
                        inOrder.Pop();
                    }
                    else if (n != -1)
                    {
                        inOrder.Push(item);
                    }
                    else
                    {
                        return null;
                    }
                }
                else
                {
                    posterOrder.Add(item);
                }
            }

            return inOrder.Count == 0 ? posterOrder : null;
        }

(2)对应测试用例代码

        [TestMethod()]
        public void InorderToPostorderTest()
        {
            Queue<string> input = new Queue<string>();
            List<string> expected;
            List<string> actual;

            //test
            input.Enqueue("0");
            input.Enqueue("-");
            input.Enqueue("(");
            input.Enqueue("7");
            input.Enqueue("/");
            input.Enqueue("2");
            input.Enqueue(")");
            input.Enqueue("+");
            input.Enqueue("4");
            input.Enqueue("#");

            expected = new List<string>() { "0", "7", "2", "/", "-", "4", "+" };
            actual = Program.InorderToPostorder(input);

            CollectionAssert.AreEqual(expected, actual);
        }

7.计算后序表达式的值

输入:

{ "5", "2", "/", "3", "*", "8", "-" }

期待输出:

-0.5

(1)对应单元代码片段

        static public bool IsResult(List<string> PostorderExpress, out double result)
        {
            if (PostorderExpress != null)
            {
                try
                {
                    PostorderExpress.Add("#");
                    string[] tempArry = PostorderExpress.ToArray();
                    int length = tempArry.Length;
                    int i = 0;

                    while (tempArry[i] != "#")
                    {
                        if (isOperateors(tempArry[i]))
                        {
                            tempArry[i - 2] = Arithmetic(tempArry[i - 2], tempArry[i - 1], tempArry[i]);

                            for (int j = i; j < length; j++)
                            {
                                if (j + 1 < length)
                                {
                                    tempArry[j - 1] = tempArry[j + 1];
                                }
                            }

                            length -= 2;
                            i -= 2;
                        }

                        i++;
                    }

                    result = double.Parse(tempArry[0]);
                    return true;
                }
                catch (Exception e)
                {
                    result = 0;
                    return false;
                }
            }
            else
            {
                result = 0;
                return false;
            }
        }

(2)对应测试用例代码:

        [TestMethod()]
        public void IsResultTest()
        {
            List<string> input;
            double expected;
            double actual;

            //test
            input = new List<string>() { "5", "2", "/", "3", "*", "8", "-" };
            expected = -0.5;
            Program.IsResult(input, out actual);
            Assert.AreEqual(expected, actual);
        }

运行测试后效果截图:

结对项目拍照留念:

时间: 2025-01-02 04:04:09

20160922-四则运算单元测试的相关文章

四则运算单元测试

对于四则运算中的单元测试以两个不同功能的函数为示例展示.仍然采用JUnit4的单元测试框架 下面展示的是没有括号和分数情况下的计算函数 doCalculation的代码片段 // 对生成的4则运算进行计算 public static Double doCalculation(String formula) { ArrayList<Double> numList = new ArrayList<Double>();// 存储运算数 ArrayList<String> op

(第四周)四则运算单元测试

项目成员:黄兴.谢孝淼 程序代码 因为此前的程序只有一个主函数main(),为了做单元测试,把代码进行了一些修改,把源代码分到了几个方法里. 1.生成题目并计算的addQuestion()方法,其中把随机数和随机运算符都设成了固定值,这样是为了更容易的进行单元测试,除了这个方式,还没有想好怎样对随机数的方法进行测试. Scanner sc = new Scanner(System.in); //创建Scanner类的对象 double result=0; int right=0; //统计正确题

【week3】四则运算 单元测试

上一周的四则运算有bug,这次补充正确代码: 1 // 中缀转后缀 2 public String[] SolveOrder(String[] in, HashMap<String, Integer> precedence) { 3 // 符合逆波兰式(后缀)的输出 4 int kk=in.length; 5 String out[] = new String[kk]; 6 int p = 0 ; 7 // 操作符 8 Stack<String> ops = new Stack&l

四则运算——单元测试(测试方法:Right-BICEP )

一.测试的具体部位 Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制错误条件发生? P-是否满足性能要求? 二.测试结果 1.结果正确 2.边界条件 由上图可知,结果正确,但对于输入0值可以进行改进,让其直接不进行下列判断 3.一致性 数值范围大时,无余数的式子出现概率少 4.区间性 本程序,取值范围设置为int型,所以出题数目和出题数值都可以设很大 5.存在性 数值范围为0,产生未处理异常,此处程

四则运算—单元测试

思路:编写的程序只有一个主函数,并且每个要求的实现方式都是一层层嵌套的,也都是使用同样的方法,先用while对不符合的输入进行提示,再用if...else...分支结构选择.所以则以(是否有乘除法—是否是否有负数—数值范围—打印方式—输出题目)为单元进行测试. 按照BICEP原则: Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制错误条件发生? P-是否满足性能要求? 源代码: #include<i

四则运算--单元测试

(1)初步测试,进行进行判断,输入数据:5 100 1 0 0 0 1 (2)判断乘除变化时,结果是否正确 输入数据:5 100 1 1 0 0 1 (3)当输入的题目数为负数时,判断结果 输入数据:-10 100 1 0 0 1 0 (4)当数值过大时,计算的数值仍然合理 输入数据:10 2000 1 0 0 0 1 (5)当运算数为0时,没有运算式产生,输入数据:5 0 1 0 0 0 1 (6)当用户输入没有按照要求时,无运算式产生 输入数据:5 10 12 1 0 0 1

软件工程——四则运算单元测试(是否有乘除法)

首先找了一组比较大的数测试了一下稳定性: 下面是没有乘除法给出而结果: 有乘除法的结果:

软件工程课堂练习--四则运算单元测试

一.测试计划 对系统所要实现的功能以及程序中的函数进行针对性的测试, 1.输入出题数目,看出题数目是否正确: 2.用户首先要选择有无负数参与运算,分别用[0/1]是或否表示,分别输入[0/1]看是否有无负数出现:其次如若输入其他字符或数字,则显示提示要求用户重新输入: 3.然后用户根据提示输入是否有无乘除法,测试方法同上: 4.测试用户在重复多次操作时是否会有重复运算出现: 5.输入出题数目,选择打印列数,看是否存在问题: 二.测试执行及结果 1.输入30道题目测试有30道输出,然后用分别测试了

随机产生30道四则运算的程序单元测试

四则运算单元测试 一.测试计划: 分模块进行测试,测试各部分模块功能是否能够实现,是否能够独立运行,是否能够实现重复允许,是否有报错处理等. (1)在面对是否有乘除法运算时,输入“0”表示没有乘除法运算,输入“1”表示有乘除法运算,当输入其他数字时,则报错,要求重新输入: (2)在所有的“N”份题都含有乘除法运算时,测试有负数有余数.有负数无余数.无负数有余数.无负数无余数这4种情况下对应的结果是否符合条件(题目的份数N为用户设定),在输入的数值为0或1之外的数值,则默认为1: (3)在所有的“

每周例行报告——第三周

<待完善> 项目:词频统计——单元测试  项目类型:个人项目 项目完成情况:已完成 项目日期:2016.9.26 项目改进:2016.9.27 C类别 C内容 S开始时间 E结束时间 I间隔 T净时间 P预计时间 分析 设计  10:20  10:30  0  10  20 学习 查阅资料  10:30  11:00  10  20  20 测试 练习Junit  13:20  15:00  10  90  180 编码 实现  15:30  17:00  0  90  120   改进  1