Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 配置Junit+;弹簧&x2B;冬眠4+;maven:Null指针获取会话_Java_Spring_Hibernate_Maven_Junit - Fatal编程技术网

Java 配置Junit+;弹簧&x2B;冬眠4+;maven:Null指针获取会话

Java 配置Junit+;弹簧&x2B;冬眠4+;maven:Null指针获取会话,java,spring,hibernate,maven,junit,Java,Spring,Hibernate,Maven,Junit,我希望有人能帮助我。我是新手,现在真的很困惑。我用谷歌搜索了很多次,但我还是很困惑。 在经历了几个错误之后。。。我陷入了nullPointerException 我有一个服务及其实现: 存储库实现: 然后我的测试班: 当我运行它时,我有这个stacktrace,空指针: Session Session=sessionFactory.getCurrentSession() 堆栈跟踪: 现在它抛出这个堆栈跟踪: org.springframework.beans.factory.BeanCreat

我希望有人能帮助我。我是新手,现在真的很困惑。我用谷歌搜索了很多次,但我还是很困惑。 在经历了几个错误之后。。。我陷入了nullPointerException

我有一个服务及其实现:

存储库实现:

然后我的测试班:

当我运行它时,我有这个stacktrace,空指针: Session Session=sessionFactory.getCurrentSession()

堆栈跟踪:

现在它抛出这个堆栈跟踪:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.myApp.repository.test.PollRepositoryTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myApp.services.PollService com.myApp.repository.test.PollRepositoryTest.pollService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myApp.services.PollService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:384)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:326)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:212)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myApp.services.PollService com.myApp.repository.test.PollRepositoryTest.pollService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myApp.services.PollService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
    ... 26 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myApp.services.PollService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1100)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:855)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
    ... 28 more
这意味着我需要在applicationContext中创建bean?因为我喜欢放东西 在my appContext中,xml用于避免在xml中创建bean。
我希望你能在这个问题上帮助我。非常感谢您的回答。

Session Session=sessionFactory.getCurrentSession()行在哪里?如果它是一个简单的成员变量,那么它将在构造时执行。但是这些资源直到后来才被注入。因此,将该行移到一个用@Before注释的方法中

private Session session;

@Before
public void setUpSession() throws Exception {
  session = sessionFactory.getCurrentSession();
}

为什么要扩展
AbstractTransactionalJUnit4SpringContextTests

我的典型测试(在测试spring mvc时)如下所示:

WebControllerTest.java CustomerControllerTest.java 另外:我建议使用SpringBoot及其自动配置来启动并运行。让您可以使用spring,而无需第一次就将每个配置正确

春季的学习曲线相当陡峭(我自己也是初学者:)

一般建议
Runner
vs扩展
SpringContextTests
你什么时候使用runner

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TransactionConfiguration
@Transactional
然后,不需要扩展
AbstractTransactionalJUnit4SpringContextTests

注意:这个类(
AbstractTransactionalJUnit4SpringContextTests
)只是为了方便扩展。如果您不希望您的测试类绑定到特定于Spring的类层次结构,您可以使用
SpringJUnit4ClassRunner
@ContextConfiguration
@TestExecutionListeners
@Transactional
等来配置您自己的自定义测试类


使用@Before实例化字段 字段应该在之前的
@内实例化,比如@Paul Hicks said或inplace,如果可能的话,在这里声明字段

@Resource
protected SessionFactory sessionFactory;

Session session;

@Before
public void setup(){
    session = sessionFactory.getCurrentSession();
}

SpringContextTests
此代码不是必需的

public PollRepositoryTest(){
   super();
}
混合弹簧版本 不要在一个项目中混合使用spring版本

    <artifactId>spring-expression</artifactId>
    <version>4.0.0.RELEASE</version>

    <artifactId>spring-beans</artifactId>
    <version>3.2.1.RELEASE</version>

    <artifactId>spring-test</artifactId>
    <version>3.1.1.RELEASE</version>
spring表达式
4.0.0.0发布
春豆
3.2.1.1发布
弹簧试验
3.1.1.1发布

只使用一个版本,好主意是创建
${spring.version}
属性。

在一个类上同时使用
@Controller(“PollService”)
和@Service没有任何意义,您应该只对dispatcher servlet中直接处理web请求的类使用
@Controller
。顺便说一句,Paul Hicks是对的-在构建对象之前不可能注入任何东西。感谢您的评论Boris,我用您建议的更改更新了这个问题。你能再看一次吗?我还是有点困惑。致以最诚挚的问候。您的XML配置中是否有
以检测
@Service
注释类?嗨,Boris Treukhov,我做到了,现在我收到了这个错误:创建名为“nameRepository”的bean时出错,该bean的实例化失败;嵌套异常为org.springframework.beans.BeanInstantiationException:无法实例化bean类[nameRepositoryImpl]:构造函数引发异常;嵌套的异常是java.lang.NoClassDefFoundError:javax/xml/rpc/encoding/Serializer我认为这是一个更深层次的错误,不是吗?请请求集成测试。谢谢Paul,我更新了这个问题并修复了类。你能看一下吗?我还是有点困惑,看起来像是一个全新的问题。第一个想法:你打开上下文扫描了吗?在哪里定义了组件扫描,并且正在扫描PollServiceImpl?旁白:避免使用大写字母的包裹名称。这可能会导致OSs和SCM的某些组合出现混乱和错误。
@Resource
protected SessionFactory sessionFactory;

private Session session;

@Before
public void setUpSession() throws Exception {
  session = sessionFactory.getCurrentSession();
}

@Autowired
private PollService pollService;

@Rollback(true)
@Test
public void testSaveQuizPreference() throws Exception  { /**...**/}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.myApp.repository.test.PollRepositoryTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myApp.services.PollService com.myApp.repository.test.PollRepositoryTest.pollService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myApp.services.PollService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:384)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:110)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:326)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:212)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myApp.services.PollService com.myApp.repository.test.PollRepositoryTest.pollService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myApp.services.PollService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
    ... 26 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.myApp.services.PollService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1100)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:855)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
    ... 28 more
private Session session;

@Before
public void setUpSession() throws Exception {
  session = sessionFactory.getCurrentSession();
}
import org.junit.Before;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import com.***.hkb.salesweb.Application;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public abstract class WebControllerTest {

    @Autowired
    CustomerController customerController;

    protected MockMvc mockMvc;

    @Autowired
    WebApplicationContext wac;

    @Before
    public void setup() {

        // Process mock annotations
        MockitoAnnotations.initMocks(this);
        // Setup Spring test in webapp-mode (same config as spring-boot)
        this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }
}
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

import org.junit.Test;

public class CustomerControllerTest extends WebControllerTest {

    @Test
    public void testLoadCustomerPage() throws Exception{
        this.mockMvc.perform(get("/customer")).andExpect(status().isOk());

    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TransactionConfiguration
@Transactional
@Resource
protected SessionFactory sessionFactory;

Session session;

@Before
public void setup(){
    session = sessionFactory.getCurrentSession();
}
public PollRepositoryTest(){
   super();
}
    <artifactId>spring-expression</artifactId>
    <version>4.0.0.RELEASE</version>

    <artifactId>spring-beans</artifactId>
    <version>3.2.1.RELEASE</version>

    <artifactId>spring-test</artifactId>
    <version>3.1.1.RELEASE</version>