遇到的问题

使用maven创建一个springboot项目,在springboot测试文件中进行修改和添加测试,
结果测试类报异常:

  1. java.lang.NullPointerException
  2. at com.rit.demo.test.Tests.tt(Tests.java:32)
  3. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  4. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  5. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  6. at java.lang.reflect.Method.invoke(Method.java:498)
  7. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
  8. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  9. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
  10. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
  11. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
  12. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
  13. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
  14. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
  15. at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
  16. at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
  17. at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
  18. at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
  19. at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
  20. at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
  21. at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
  22. at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:40)
  23. at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
  24. at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
  25. at java.util.Iterator.forEachRemaining(Iterator.java:116)
  26. at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
  27. at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
  28. at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
  29. at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
  30. at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
  31. at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
  32. at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
  33. at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:80)
  34. at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:71)
  35. at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
  36. at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
  37. at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
  38. at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:100)
  39. at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
  40. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
  41. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
  42. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
  43. at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)

当时使用@Test注解是引用的是org.junit.Test类,导致报错空指针。
当换成org.junit.jupiter.api.Test是,就没有异常了。

原因:

  1. 在Spring Boot 2.2.x之前使用org.junit.Test Junit4

在使用Junit4是,需要在类上加上注解@RunWith(SpringRunner.class)

  1. 在Spring Boot 2.2.x之后使用org.junit.jupiter.api.Test Junit5

    方案

  2. 使用Junit4 ```java package com.rit.demo.test;

import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class) @SpringBootTest public class Tests {

  1. @Test
  2. public void test() {
  3. }

}

  1. 2. 使用Junit5
  2. ```java
  3. package com.rit.demo.test;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. @SpringBootTest
  7. public class Tests {
  8. @Test
  9. public void test() {
  10. }
  11. }