覆盖率
总结
1. 这道题是目前为止我做过的唯一一道,测试用例的覆盖率拖累被测文件覆盖率。因为要捕捉好几种类型的异常。目的是增加变异得分。
2. parseCommand这个函数的输出,其实就是提示要怎么写测试用例。
3. 这一题只需要测Calculator.java这一个类,因为它使用ExpressionParser.java,而后者又继承了MathParser.java,至于其余的七个异常文件,自然都是运算触发的。
待改进
1. 我没有分析异常间的继承关系,或许每个test的类都要expected那个父类异常才安全。
2. 还有个别分支因为不理解意思不知道怎么进入。
代码
package net.mooctest;import static org.junit.Assert.*;import org.junit.Test;public class CalculatorTest {private Calculator c = new Calculator();@Test(timeout = 4000)public void test00() throws Throwable {c.expParser = new ExpressionParser(10);c.expParser.addVariable("wxy", "330");assertEquals(1,c.expParser.numberOfVars);c.expParser.addVariable("wyc", "1225");c.expParser.addVariable("wyc", "1215");assertEquals(2,c.expParser.numberOfVars);c.expParser.addVariable("fd", "429");assertEquals(3,c.expParser.numberOfVars);c.expParser.addVariable("wlw", "918");// c.parseCommand("list vars");}@Test(timeout = 4000)public void test01() throws Throwable {assertEquals("200.0",c.evaluate("100+100"));assertEquals(4,c.expParser.numberOfVars);c.evaluate("gjr = 922");assertEquals(5,c.expParser.numberOfVars);}@Test(timeout = 4000,expected=ExpressionParserException.class)public void test02() throws Throwable {c.evaluate("");}@Test(timeout = 4000,expected=ExpressionParserException.class)public void test03() throws Throwable {System.out.println(c.evaluate("wxy + wyc"));}@Test(timeout = 4000)public void test04() throws Throwable {assertEquals("35.0",c.evaluate("(3+4)*5"));}@Test(timeout = 4000,expected=ExpressionParserException.class)public void test05() throws Throwable {assertEquals("1024.0",c.evaluate(" 2^10 "));}@Test(timeout = 4000,expected=ExpressionParserException.class)public void test06() throws Throwable {assertEquals("1545.0",c.evaluate("<wxy> + <wyc>"));assertEquals("2.0",c.evaluate("1 + abs[2 - 3]"));assertEquals("1.0",c.evaluate("log[exp[1.0]]"));c.expParser.addVariable("pi", "3.1415926");assertEquals("179.99999692953102",c.evaluate("deg[ <pi> ] "));assertEquals("3.141592653589793",c.evaluate("rad[ 180 ]"));c.expParser.addVariable("pi", "3.141592653589793");assertEquals("1.0",c.evaluate("sin[ <pi>/2 ]"));assertEquals("6.123233995736766E-17",c.evaluate("cos[ <pi>/2 ]"));assertEquals("-1.2246467991473532E-16",c.evaluate("tan[ <pi> ]"));assertEquals("Infinity",c.evaluate("ctn[ 0 ]"));}@Test(timeout = 4000,expected=ExpressionParserException.class)public void test07() throws Throwable {assertEquals("1.0",c.evaluate("fct[ 0 ]"));assertEquals("1.0",c.evaluate("fct[ 1 ]"));assertEquals("3628800.0",c.evaluate("fct[ 10 ]"));assertEquals("6.0",c.evaluate("13%7"));assertEquals("6.0",c.evaluate("13-7"));assertEquals("1.4142135623730951",c.evaluate("csc[ <pi>/4 ]"));assertEquals("1.414213562373095",c.evaluate("sec[ <pi>/4 ]"));System.out.println(c.evaluate("sec[ <pi>/4 ]"));}@Test(timeout = 4000,expected=UnmatchedBracketsException.class)public void test08() throws Throwable {System.out.println(c.evaluate("csc[ <pi>/4 "));}@Test(timeout = 4000,expected=ExpressionParserException.class)public void test09() throws Throwable {System.out.println(c.evaluate("<$>"));}@Test(timeout = 4000,expected=ExpressionParserException.class)public void test10() throws Throwable {System.out.println(c.evaluate("$100"));}@Test(timeout = 4000,expected=ExpressionParserException.class)public void test11() throws Throwable {System.out.println(c.evaluate("abc[100]"));}@Test(timeout = 4000,expected=CommandNotFoundException.class)public void test12() throws Throwable {c.parseCommand("lueluelue");}@Test(timeout = 4000,expected=CommandNotFoundException.class)public void test13() throws Throwable {assertEquals("-3628800.0",c.evaluate("-fct[ 10 ]"));}@Test(timeout = 4000,expected=NullPointerException.class)public void test14() throws Throwable {c.parseCommand("exit");c.parseCommand("help");c.parseCommand("help vars");c.parseCommand("help funcs");c.parseCommand("help cmds"); c.parseCommand("list"); c.parseCommand("list cmds"); c.parseCommand("list vars"); c.parseCommand("list funcs"); System.out.println(c.evaluate("<ans>=114"));}@Test(timeout = 4000,expected=CommandNotFoundException.class)public void test15() throws Throwable {assertEquals("1013.294133013707",c.evaluate("(<fd>^2 + <wlw>^2)^0.5"));c.expParser.variables[0][0] = "wxy";c.expParser.variables[0][1] = "200";c.expParser.variables[1][0] = "wyc";c.expParser.variables[1][1] = "50";c.expParser.variables[2][0] = "fd";c.expParser.variables[2][1] = "100";assertEquals("2.5",c.evaluate("(<wxy>+<wyc>)/<fd>"));}}