Java 正在获取已执行代码的行号
我正在编写一个用于自动生成单元测试用例的应用程序。该应用程序将一个.java文件作为输入,然后对其进行处理以查找其所有方法。然后使用以下命令使用测试数据调用这些方法。 调用(classObj,MethodArg); 现在,我希望找到在调用的方法中执行的行,以计算覆盖率。我曾尝试使用StackTrace()执行此操作,但它给出了应用程序代码的行号。 有人能帮我吗。我完全迷路了。我们将非常感谢您的帮助。 我目前的代码是:Java 正在获取已执行代码的行号,java,Java,我正在编写一个用于自动生成单元测试用例的应用程序。该应用程序将一个.java文件作为输入,然后对其进行处理以查找其所有方法。然后使用以下命令使用测试数据调用这些方法。 调用(classObj,MethodArg); 现在,我希望找到在调用的方法中执行的行,以计算覆盖率。我曾尝试使用StackTrace()执行此操作,但它给出了应用程序代码的行号。 有人能帮我吗。我完全迷路了。我们将非常感谢您的帮助。 我目前的代码是: Runnable myRunnable; myRunnable
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();
您可以阅读覆盖率工具如何收集其统计数据 但在此之前,您尝试做的并没有多大用处——任何测试的全部目的都是测试一段代码的意图。要做到这一点,你需要知道边界是什么,你期望结果是什么 例如:
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));
}
}
您将无法仅从方法签名生成此代码的测试。您必须引入测试数据,这可能会定义它适用于哪种方法,但是在像这样简单的情况下,数据将成为测试用例,您所实现的只是引入额外的复杂性层
在一天结束时,单元测试是您的测试数据,在这里可以很好地定义测试规范。
newexception()
是在代码中的一行创建的。所以它当然会在代码中引用这一行。是否有任何原因导致您创建自己的测试框架而不使用标准框架,例如JUnit?我怀疑这就是代码覆盖率的实现方式。我认为您可能希望VM代理执行一些低级跟踪。