0

我正在编写一个用于自动生成单元测试用例的应用程序。该应用程序将 .java 文件作为输入,然后对其进行处理以查找其所有方法。然后使用以下命令使用测试数据调用这些方法。方法.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();
4

1 回答 1

0

您可以在此处阅读覆盖工具如何收集其统计信息。

但在此之前,您尝试做的事情不会有太大用处 - any 测试的全部目的是测试一段代码的意图。要做到这一点,你需要知道界限是什么,你期望的结果是什么。

例如:

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));
  }
}

您将无法仅从方法签名中为此代码生成测试。您将不得不引入测试数据,这可以切实地定义它适用于哪种方法,但是在这种简单的情况下,数据将成为测试用例,而您所取得的只是引入了额外的复杂层.

归根结底,单元测试是您可以很好地定义测试规范的测试数据。

于 2013-05-02T11:35:02.420 回答