注意四点:
- 用户 Hoàng Long 是对的,您需要指定完全限定的类名,而不是 JUnit 运行器的路径。
- 这也意味着您需要将测试类的路径添加到类路径中。
- 在类路径中不能使用
*.jar,只能使用* 作为通配符,参见this answer。
- 此外,如果您真的想使用预编译的 AspectJ 方面,还需要将 AspectJ 运行时 aspectjrt.jar 添加到您的类路径中。
这是一个如何在您的情况下运行 JUnit 的示例。我添加了换行符以使其更具可读性,所有内容都需要在一行中:
java
-cp
"C:\Users\name\git\WhileyCompiler\lib\junit-4.11.jar";
"C:\Users\name\git\WhileyCompiler\lib\*";
"C:\Users\name\git\WhileyCompiler\lib\hamcrest-all-1.3.jar";
"C:\Users\name\git\WhileyCompiler\lib\aspectjrt.jar";
"C:\Users\name\git\Test\bin"
org.junit.runner.JUnitCore
wyc.testing.AllValidTests
更新:
实际上我这周很忙,但我只是在二进制 JAR 上使用 LTW 快速尝试了一下,但 *.whiley 测试文件已解压缩。它工作得很好,我在控制台上看到了日志输出。我不得不改变你的切入点,因为当所有加载的框架类(例如来自 JUnit)也被编织时,它会导致 LTW 场景中的输出臃肿。我还稍微简化了您的方面,以便直接在System.out 上提供格式化输出,而不是所有带有时间戳的日志记录开销,因为我发现它更具可读性。
修改方面:
package de.scrum_master.aspect;
public aspect TraceAspect {
pointcut traceMethods() :
execution(* *(..)) && (within(whiley..*) || within(wy*..*));
before() : traceMethods() {
System.out.printf(
"%40s | %s%n",
thisJoinPoint.getSourceLocation(),
thisJoinPoint.getSignature()
);
}
}
控制台输出:
JUnit version 4.11
. AllValidTests.java:2729 | void wyc.testing.AllValidTests.TypeEquals_Valid_1()
AllValidTests.java:97 | void wyc.testing.AllValidTests.runTest(String)
TestUtils.java:28 | Pair wyc.testing.TestUtils.compile(String[])
Pipeline.java:292 | void wycc.lang.Pipeline.register(Class)
Pipeline.java:292 | void wycc.lang.Pipeline.register(Class)
Pipeline.java:292 | void wycc.lang.Pipeline.register(Class)
Pipeline.java:292 | void wycc.lang.Pipeline.register(Class)
Pipeline.java:292 | void wycc.lang.Pipeline.register(Class)
Pipeline.java:292 | void wycc.lang.Pipeline.register(Class)
Pipeline.java:292 | void wycc.lang.Pipeline.register(Class)
Pipeline.java:292 | void wycc.lang.Pipeline.register(Class)
Content.java:135 | Content.Filter wyfs.lang.Content.filter(String, Content.Type)
Trie.java:238 | Trie wyfs.util.Trie.fromString(String)
Trie.java:193 | Trie wyfs.util.Trie.append(String)
Trie.java:312 | int wyfs.util.Trie.binarySearch(Trie[], int, String)
Content.java:135 | Content.Filter wyfs.lang.Content.filter(String, Content.Type)
Trie.java:238 | Trie wyfs.util.Trie.fromString(String)
Trie.java:193 | Trie wyfs.util.Trie.append(String)
Trie.java:312 | int wyfs.util.Trie.binarySearch(Trie[], int, String)
Content.java:135 | Content.Filter wyfs.lang.Content.filter(String, Content.Type)
Trie.java:238 | Trie wyfs.util.Trie.fromString(String)
Trie.java:193 | Trie wyfs.util.Trie.append(String)
Trie.java:312 | int wyfs.util.Trie.binarySearch(Trie[], int, String)
VirtualRoot.java:50 | VirtualRoot.Folder wyfs.util.VirtualRoot.root()
VirtualRoot.java:50 | VirtualRoot.Folder wyfs.util.VirtualRoot.root()
VirtualRoot.java:50 | VirtualRoot.Folder wyfs.util.VirtualRoot.root()
WycMain.java:179 | int wyc.WycMain.run(String[])
OptArg.java:322 | Map wycc.util.OptArg.parseOptions(List, OptArg[])
OptArg.java:218 | void wycc.util.OptArg.FILEDIR.process(String, String, Map)
OptArg.java:231 | void wycc.util.OptArg.FILELIST.process(String, String, Map)
WycMain.java:258 | void wyc.WycMain.configure(Map)
WycBuildTask.java:331 | void wyc.util.WycBuildTask.setVerbose(boolean)
WycBuildTask.java:335 | void wyc.util.WycBuildTask.setVerification(boolean)
WycBuildTask.java:343 | void wyc.util.WycBuildTask.setSmtVerification(boolean)
WycBuildTask.java:339 | void wyc.util.WycBuildTask.setVerificationConditions(boolean)
WycBuildTask.java:359 | void wyc.util.WycBuildTask.setWhileyDir(File)
DirectoryRoot.java:135 | DirectoryRoot.Folder wyfs.util.DirectoryRoot.root()
DirectoryRoot.java:135 | DirectoryRoot.Folder wyfs.util.DirectoryRoot.root()
WycBuildTask.java:399 | void wyc.util.WycBuildTask.setBootPath(List)
... | ...