我正在编写一个自动生成单元测试用例的应用程序。应用程序将.java文件作为输入,然后处理它以查找其所有方法。然后使用以下命令使用测试数据调用这些方法。 method.invoke(classObj,MethodArg); 现在我希望找到在调用方法中执行的行来计算覆盖率。我尝试使用StackTrace()来做这个,但它给出了我的应用程序代码的行号。 谁能帮我这个。我完全彻底迷失了。任何帮助将受到高度赞赏。 我目前的代码是:
Runnable myRunnable;
myRunnable = new Runnable(){
public void run(){
try {
int returnValInt = (int) fm.invoke(fobj, fargs);
System.out.println(new Exception().getStackTrace()[0].getLineNumber());
} catch (IllegalAccessException ex) {
Logger.getLogger(HelloWorldFrame.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(HelloWorldFrame.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(HelloWorldFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
Thread th= new Thread(myRunnable, "th");
th.start();
答案 0 :(得分:0)
您可以阅读保护工具如何收集其统计信息here。
但在此之前,你要做的事情并没有多大用处 - 任何测试的重点都是测试一段代码的意图。要做到这一点,你需要知道边界是什么,你期望结果是什么。
例如:
public class Math
{
public static long add(long a, long b)
{
return a + b;
}
public static long multiply(long a, long b)
{
return a * b;
}
}
public class MathTest
{
@Test
public void testAdd()
{
assertTrue(5, Math.add(2, 3));
}
@Test
public void testMultiply()
{
assertTrue(6, Math.multiply(2, 3));
}
}
您将无法仅从方法签名生成此代码的测试。您将不得不引入测试数据,这可能可行地定义它适用于哪种方法,但是除了这样的简单情况之外,数据将成为测试用例,而您所实现的只是引入额外的复杂层
在一天结束时,单元测试是您的测试数据,其中可以很好地定义测试规范。