【问题标题】:When I use JUnit, occur this error. How to solve this error?当我使用 JUnit 时,出现此错误。如何解决这个错误?
【发布时间】:2017-08-02 07:59:28
【问题描述】:

当我使用 JUnit 时,我遇到了这个错误:

java.lang.NullPointerException 在 com.mpdidb.mapper.TbUserServiceTest.selectByPrimaryKeyTest(TbUserServiceTest.java:27) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) 在 org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) 在 org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:137) 在 com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) 在 com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) 在 com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) 在 com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

这是我的 JUnit 代码:

@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {RootConfig.class})
public class TbUserServiceTest
{
    @Autowired
    private static TbUserService tbUserService;

    @Test
    public void selectByPrimaryKeyTest()
    {
        String userId = "wusuodai";
        TbUser tbUser = tbUserService.selectByPrimaryKey(userId);
        System.out.println(tbUser.getUserName());
    }
}

如何解决这个错误?

【问题讨论】:

  • 看起来您的 @Autowired 在此设置中不起作用,并且 tbUserService 为空。老实说:如果你不知道 NPE 是什么以及如何处理它,那么 spring 和 spring-mvc 不是你现在可以处理的东西。而是专注于阅读一本关于 java basics 的好书。
  • 非常感谢。当我运行 Web 应用程序时,TbUserService 可以正常运行。但是我在junit test的时候会遇到这个错误,这是为什么呢?
  • 我告诉过你:那个字段是空的;并且合乎逻辑的结果是 @Autowired 没有完成它的工作 - 很可能是因为通常“处理”这些注释的 framework 没有启动。从这个意义上说:做一些研究如何在春季环境中进行单元测试。或者照我说的做:退后一步,学习基础知识。在参加跨栏比赛之前学习爬行。
  • 提示:您可能想阅读stackoverflow.com/questions/21878714/… ... stackoverflow.com/questions/26462926/autowired-with-junit-tests ... 如前所述:您不是第一个尝试这样做的人。跨度>

标签: spring spring-mvc


【解决方案1】:

静态字段不能通过字段注入自动装配。考虑使用 setter 注入。

private static TbUserService tbUserService;

@Autowired
public void setTbUserService(TbUserService tbUserService){
  this.tbUserService = tbUserService;
}

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 2018-12-25
    • 2018-12-19
    • 1970-01-01
    • 2017-07-15
    • 2021-12-22
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多