将程序的输出结果与预期结果进行比较的测试工具代码
程序使用说明
程序功能
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<AnyType extends Comparable<? super AnyType>> {
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 extends Comparable<? super AnyType>> AnyType test(AnyType i){
// return i;
// }
public <AnyType> 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<Integer> 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上下载
下载链接