我在Eclipse中有一个Java项目,我的src/test
目录中有JUnit测试。我还使用Caliper微基准测试为我的测试添加了一个类,我希望能够在Eclipse中运行这些测试。
由于Caliper代码是测试代码,我在test
范围内将Caliper添加为Maven中的依赖项。这使得它在运行JUnit测试时显示在类路径中,但我看不到在类路径中运行具有测试依赖性的任意类的方法。我尝试做的是为Java应用程序添加一个新的运行配置,认为我可以使用正确的类作为参数启动CaliperMain
,但Caliper jar不在类路径上,我看不到如何添加它
我不想将我的基准代码和依赖项移到main
范围内,因为它是测试代码!将它转变为一个完全独立的项目似乎非常过分。
答案 0 :(得分:5)
您应该可以使用Maven Exec Plugin执行此操作。对于我的项目,我选择制作可以使用maven命令mvn compile -P benchmarks
运行的基准配置文件。
要配置此类内容,您可以在pom.xml
中添加以下内容,并使用<classpathScope>
标记将类路径的范围指定为测试:
<profiles>
<profile>
<id>benchmarks</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>caliper</id>
<phase>compile</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<classpathScope>test</classpathScope>
<mainClass>com.google.caliper.runner.CaliperMain</mainClass>
<commandlineArgs>com.stackoverflow.BencharkClass,com.stackoverflow.AnotherBenchmark</commandlineArgs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
或者,如果您想为卡尺指定很多选项,可能更容易使用<arguments>
标签:
<executions>
<execution>
<id>caliper</id>
<phase>compile</phase>
<goals>
<goal>java</goal>
</goals>
<configuration>
<classpathScope>test</classpathScope>
<mainClass>com.google.caliper.runner.CaliperMain</mainClass>
<arguments>
<argument>com.stackoverflow.BencharkClass</argument>
<argument>--instrument</argument>
<argument>runtime</argument>
<argument>-Cinstrument.allocation.options.trackAllocations=false</argument>
</arguments>
</configuration>
</execution>
</executions>
可以找到更多配置选项(例如上面-Cinstrument.allocation.options.trackAllocations
)here,可以找到更多运行时选项(如上面的--instrument
){。{3}}。
然后,如果您使用的是Eclipse m2 Maven插件,则可以右键单击项目文件夹并选择Run as... -> Maven Build...
并在clean install
输入框中输入Goals
之类的内容, benchmarks
输入框中的Profiles
,然后点击Run
,您应该会在Eclipse控制台中看到输出。
重要的是要注意我使用git clone https://code.google.com/p/caliper/
检查了源代码来使用Caliper的本地快照构建,这是在本文发布时为了利用最新的API而推荐的。