这篇来学习命令行如何执行Junit测试用例,其实就是一个很长的命令,我们需要分步骤地去拼接这个命令,最后这些步骤其实都是可以通过自动化完成。
1.下载Junit jar包
去https://github.com/junit-team/junit4/wiki/Download-and-Install
下载两个包
其实这两个jar在我们eclipse上项目中都有
把这两个放在一个文件夹下,例如
2.Eclipse上打包成jar
选择Junit这个工程,右键-export-jar类型,记得勾选下面两个项目
记得选择一个路径,并取一个名字,例如xxx.jar。剩下的就是一直点击Next,直到结束。
3.cmd运行单元测试命令
打开cmd,输入如下命令,以下 -cp 是指 classpath
java -cp D:\junit\libs\*;D:\junit\ProteinTracker.jar org.junit.runner.JUnitCore test.TrackingServiceTests
我这边的执行纪录
C:\Users\Anthony>java -cp D:\junit\libs\*;D:\junit\ProteinTracker.jar org.junit.runner.JUnitCore test.TrackingServiceTests
JUnit version 4.13-beta-3
Before class, Onln Once
.Before Method
After Method
.Before Method
After Method
E.Before Method
After Method
.Before Method
After Method
.Before Method
After Method
After class, only once
Time: 0.116
There was 1 failure:
1) badTest(test.TrackingServiceTests)
org.junit.runners.model.TestTimedOutException: test timed out after 20 milliseconds
at test.TrackingServiceTests.badTest(TrackingServiceTests.java:62)
FAILURES!!!
Tests run: 5, Failures: 1
这个我们只是运行了一个用例,下面来看看一个TestSuite如何在cmd中运行
C:\Users\Anthony>java -cp D:\junit\libs\*;D:\junit\ProteinTracker.jar org.junit.runner.JUnitCore test.ProteinTrackerSuite
JUnit version 4.13-beta-3
.Run Hello Junit
.EBefore class, Onln Once
.Before Method
After Method
.Before Method
After Method
E.Before Method
After Method
.Before Method
After Method
.Before Method
After Method
After class, only once
Time: 0.1
There were 2 failures:
1) testThory(test.TheoryTests)
org.junit.experimental.theories.internal.ParameterizedAssertionError: testThory("-4" <from data[4]>)
at org.junit.experimental.theories.Theories$TheoryAnchor.reportParameterizedError(Theories.java:293)
at org.junit.experimental.theories.Theories$TheoryAnchor$1$1.evaluate(Theories.java:242)
at org.junit.experimental.theories.Theories$TheoryAnchor.runWithCompleteAssignment(Theories.java:223)
at org.junit.experimental.theories.Theories$TheoryAnchor.runWithAssignment(Theories.java:209)
at org.junit.experimental.theories.Theories$TheoryAnchor.runWithIncompleteAssignment(Theories.java:217)
at org.junit.experimental.theories.Theories$TheoryAnchor.runWithAssignment(Theories.java:207)
at org.junit.experimental.theories.Theories$TheoryAnchor.evaluate(Theories.java:192)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:365)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:330)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:78)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:328)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:65)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:292)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:305)
at org.junit.runners.ParentRunner.run(ParentRunner.java:412)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:330)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:78)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:328)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:65)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:292)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:305)
at org.junit.runners.ParentRunner.run(ParentRunner.java:412)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:330)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:78)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:328)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:65)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:292)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:305)
at org.junit.runners.ParentRunner.run(ParentRunner.java:412)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:77)
at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
Caused by: java.lang.AssertionError
at org.junit.Assert.fail(Assert.java:87)
at org.junit.Assert.assertTrue(Assert.java:42)
at org.junit.Assert.assertTrue(Assert.java:53)
at test.TheoryTests.testThory(TheoryTests.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.experimental.theories.Theories$TheoryAnchor$2.evaluate(Theories.java:279)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:305)
at org.junit.experimental.theories.Theories$TheoryAnchor$1$1.evaluate(Theories.java:237)
... 38 more
2) badTest(test.TrackingServiceTests)
org.junit.runners.model.TestTimedOutException: test timed out after 20 milliseconds
at test.TrackingServiceTests.badTest(TrackingServiceTests.java:62)
FAILURES!!!
Tests run: 7, Failures: 2
这种确实是在持续集成中的一个选择,只要安装了java,我就可以运行JUnit单元测试,不管是在win还是linux机器上都可以实现,把这个挂在jenkins上实现持续的单元测试。打包成jar是可以通过命令完成的,具体路径也是代码里可以指定的,这一切都可以实现自动化操作。