0

プログラムで呼び出されているすべての外部関数のリストを見つけようとしています。テスト対象のプログラムはパッケージ内にnet.sf.gaeappmanager.google.appengineあり、外部関数は のパッケージおよびサブパッケージ内にありますorg.apache.http..

これを達成するために、私は以下のように側面を書きました:

public pointcut capturehttp() :
    within(net.sf.gaeappmanager..*) && 
    !within(gaeAspect) &&
    (
        call(* org.apache.http..*+.*(..)) ||
        call(org.apache.http..*+.new(..))
    );

after() : capturehttp() {
    System.out.println(
        "Function of http Package" +
        thisJoinPoint.getSignature().getName()
    );
}

しかし、この側面は本来あるべきように機能していません。未処理の例外をスローしています。System.out.println("Function of http Package")なしでのみ使用すると、正常にthisJoinPoint動作します。

@kriegaex の要求に応じて追加情報を追加

Evosuite ツールで生成されたテスト ケースを使用して PUT を実行しています。最初に、ここにテスト ケースを含めます。

@Test
  public void test0()  throws Throwable  {
      // Undeclared exception!
      try { 
        Manager.retrieveAppQuotaDetails("@;[", ")C)!L{Fy,b%<$%", "@;[", ")C)!L{Fy,b%<$%");
        fail("Expecting exception: NoClassDefFoundError");

      } catch(NoClassDefFoundError e) {
         //
         // org/apache/commons/logging/LogFactory
         //
         assertThrownBy("org.apache.http.impl.client.AbstractHttpClient", e);
      }
  }

  //Test case number: 1
  /*
   * 1 covered goal:
   * Goal 1. net.sf.gaeappmanager.google.appengine.Manager.<init>()V: root-Branch
   */

  @Test
  public void test1()  throws Throwable  {
      Manager manager0 = new Manager();
  }
}

このテスト ケースを (上記の側面で) 実行すると、次の例外が発生します。

There were 2 failures:
1) test1(net.sf.gaeappmanager.google.appengine.Manager_ESTest)
java.lang.NoClassDefFoundError: Could not initialize class net.sf.gaeappmanager.
google.appengine.Manager
        at net.sf.gaeappmanager.google.appengine.Manager_ESTest.test1(Manager_ES
Test.java:48)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Framework
Method.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCal
lable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMe
thod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMet
hod.java:17)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.
java:26)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.ja
va:27)
        at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement
.call(FailOnTimeout.java:298)
        at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement
.call(FailOnTimeout.java:292)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.lang.Thread.run(Thread.java:745)
2) test0(net.sf.gaeappmanager.google.appengine.Manager_ESTest)
java.lang.AssertionError: Exception was not thrown in org.apache.http.impl.clien
t.AbstractHttpClient
        at org.evosuite.runtime.EvoAssertions.assertThrownBy(EvoAssertions.java:
70)
        at net.sf.gaeappmanager.google.appengine.Manager_ESTest.test0(Manager_ES
Test.java:36)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Framework
Method.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCal
lable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMe
thod.java:47)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMet
hod.java:17)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.
java:26)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.ja
va:27)
        at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement
.call(FailOnTimeout.java:298)
        at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement
.call(FailOnTimeout.java:292)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.lang.Thread.run(Thread.java:745)

FAILURES!!!
Tests run: 2,  Failures: 2

アスペクトにthisJoinPointを使用せずに同じテスト ケースを実行すると、次の結果が得られます。

.

.Function of http Package
Time: 0.669
OK (2 tests)

私の主な関心事は、側面にthisJoinPointを追加すると例外が発生する理由と、プログラム内のすべての外部関数のリストを取得する方法です。

4

0 に答える 0