将程序的输出结果与预期结果进行比较的测试工具代码

将程序的输出结果与预期结果进行比较的测试工具代码

程序使用说明

程序功能

1.加载测试用例的输入与预期结果
2.执行被测试程序
3.将执行结果与预期结果进行比较

输入参数

用例输入文件路径
用例预期结果文件路径
被测试程序类名
被测试程序方法名

输出

用例通过返回值为true,用例未通过返回值为false

其他说明

用例输入文件和用例输出文件可存放多个用例,每个用例各占一行。
每个输入都要有对应预期结果,每个预期结果有要有对应输入。(一一对应,个数务必相同)
目前 不支持 输入和预期结果为数组、链表、树、map的形式。

程序源代码

测试工具类

package tools;

import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author MorWin
 */
public class TestUtil> {
    public boolean isTestPass(String inputFilePath, String expectedResultFilePath, String className, String methodName)
            throws IOException, NoSuchMethodException, ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {
        //加载用例输入
        BufferedReader inputBufferedReader = loadUseCaseInput(inputFilePath);
        AnyType input;

        //加载用例预期输出
        BufferedReader expectedResultBufferedReader = loadUseCaseInput(expectedResultFilePath);
        AnyType expectedResult;
        String input_line="";
        while((input_line=inputBufferedReader.readLine())!=null) {
            input=(AnyType)input_line;
            expectedResult=(AnyType) expectedResultBufferedReader.readLine();

            //执行测试函数
            Class testedClass = Class.forName(className);
            Method m = testedClass.getMethod(methodName,Object.class);
            AnyType output = (AnyType) m.invoke(testedClass.newInstance(),input);
            //将执行结果与预期结果进行比较
            boolean isEqual = Compare(output, expectedResult);
            if (!isEqual) {
                return false;
            }
        }
        return true;
    }


    public static BufferedReader loadUseCaseInput(String inputPath) throws FileNotFoundException {
        FileReader inputFileReader=new FileReader(inputPath);
        BufferedReader inputBufferedReader=new BufferedReader(inputFileReader);
        return inputBufferedReader;
    }


    public static BufferedReader loadUseCaseOutput(String outputPath) throws FileNotFoundException {
        FileReader outputFileReader=new FileReader(outputPath);
        BufferedReader outputBufferedReader=new BufferedReader(outputFileReader);
        return outputBufferedReader;
    }
    public boolean Compare(AnyType output,AnyType expectedResult){
            return output.toString().equals(expectedResult.toString());
    }
}

被测程序示例

package tmp;
import tools.TestUtil;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;

/**
 * @author LXC
 */
public class JustTest {

//    public static > AnyType test(AnyType i){
//        return i;
//    }

    public  int test(AnyType i){
        return 2;
    }

    public static void  main(String[] args) throws NoSuchMethodException, IOException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException {
        String inputFilePath=JustTest.class.getClassLoader().getResource("a.txt").getPath();
        String expectedResultFilePath=JustTest.class.getClassLoader().getResource("b.txt").getPath();
        TestUtil tu= new TestUtil<>();
        boolean result=tu.isTestPass(inputFilePath,expectedResultFilePath,"tmp.JustTest","test");
//        boolean result=true;
        if(result){
            System.out.println("测试通过");
        }
        else {
            System.out.println("测试未通过");
        }
    }
}

测试用例输入a.txt

1
2
3

测试用例预期结果b.txt

2
3
4

工程源代码可在我的gitee上下载

下载链接

你可能感兴趣的:(Java)