首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring java Oracle get测试

Spring java Oracle get测试
EN

Stack Overflow用户
提问于 2018-08-26 18:58:02
回答 1查看 48关注 0票数 0

我尝试测试我与数据库的连接,当我尝试在IntelliJ IDEA集成开发环境中使用query时,它可以工作,但单元测试失败。我刚开始学习java,所以我可能做错了什么,你能告诉我怎么做对吗?我尝试测试是否从table Workers获得所有值,第二个测试是是否从table Workers获得一个特定值。

Worker模型类:

代码语言:javascript
复制
    package com.bmp.bmp.model;

import javax.persistence.*;

@Entity
@Table(name = "WORKERS")
public class Workers {

  @Id
  @Column(name = "WORKER_ID")
  private int workerId;
  @Column(name = "FIRSTNAME")
  private String firstname;
  @Column(name = "LASTNAME")
  private String lastname;
  @Column(name = "WORKPLACE_ID")
  private int workplaceId;

  public Workers(int workerId, String firstname, String lastname, int workplaceId)
  {
      super();
      this.workplaceId = workplaceId;
      this.lastname = lastname;
      this.firstname = firstname;
      this.workerId = workerId;
  }
  public Workers()
  {
      super();
  }

  public int getWorkerId() {
    return workerId;
  }

  public void setWorkerId(int workerId) {
    this.workerId = workerId;
  }


  public String getFirstname() {
    return firstname;
  }

  public void setFirstname(String firstname) {
    this.firstname = firstname;
  }


  public String getLastname() {
    return lastname;
  }

  public void setLastname(String lastname) {
    this.lastname = lastname;
  }


  public int getWorkplaceId() {
    return workplaceId;
  }

  public void setWorkplaceId(int workplaceId) { this.workplaceId = workplaceId;
  }

}

Worker存储库类:

代码语言:javascript
复制
    package com.bmp.bmp.service.implement;

import com.bmp.bmp.model.Workers;
import org.springframework.stereotype.Repository;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

@Repository
public class Worker implements com.bmp.bmp.service.interfaces.Worker
{
    private DataSource dataSource;

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public void save(Workers workers) {
        String query = "insert into Workers (WORKER_ID, FIRSTNAME, LASTNAME, WORKPLACE_ID) values ((select max(WORKER_ID)+1 from workers),?,?,?); commit;";
        Connection con = null;
        PreparedStatement ps = null;
        try{
            con = dataSource.getConnection();
            ps = con.prepareStatement(query);

            ps.setString(1, workers.getFirstname());
            ps.setString(2, workers.getLastname());
            ps.setInt(3, workers.getWorkplaceId());
            int out = ps.executeUpdate();
            if(out !=0){
                System.out.println("Worker saved with id="+workers.getWorkerId());
            }else System.out.println("Worker save failed with id="+workers.getWorkerId());
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try {
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public Workers getById(int id) {
        String query = "select FIRSTNAME, LASTNAME, WORKPLACE_ID from WORKERS where WORKER_ID = ?";
        Workers workers = null;
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            con = dataSource.getConnection();
            ps = con.prepareStatement(query);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if(rs.next()){
                workers = new Workers();
                workers.setWorkerId(id);
                workers.setFirstname(rs.getString("firstName"));
                workers.setLastname(rs.getString("lastname"));
                workers.setWorkplaceId(rs.getInt("workplace_id"));
                System.out.println("Worker Found::"+workers);
            }else{
                System.out.println("No worker found with id="+id);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return workers;
    }

    @Override
    public void update(Workers workers) {
        String query = "update Workers set FIRSTNAME=?, LASTNAME=?, WORKPLACE_ID=? where WORKER_ID=?; commit;";
        Connection con = null;
        PreparedStatement ps = null;
        try{
            con = dataSource.getConnection();
            ps = con.prepareStatement(query);
            String firstName = ("'" + workers.getFirstname() + "'");
            String lastName = ("'" + workers.getLastname() + "'");
            ps.setString(1, firstName);
            ps.setString(2, lastName);
            ps.setInt(3, workers.getWorkplaceId());
            ps.setInt(4,workers.getWorkerId());
            int out = ps.executeUpdate();
            if(out !=0){
                System.out.println("Worker updated with id="+workers.getWorkerId());
            }else System.out.println("No worker found with id="+workers.getWorkerId());
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try {
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void deleteById(int id) {
        String query = "delete from WORKERS where WORKER_ID=?; commit;";
        Connection con = null;
        PreparedStatement ps = null;
        try{
            con = dataSource.getConnection();
            ps = con.prepareStatement(query);
            ps.setInt(1, id);
            int out = ps.executeUpdate();
            if(out !=0){
                System.out.println("Worker deleted with id="+id);
            }else System.out.println("No worker found with id="+id);
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try {
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public List<Workers> getAll() {
        String query = "select WORKER_ID, FIRSTNAME, LASTNAME, WORKPLACE_ID from WORKERS";
        List<Workers> empList = new ArrayList<Workers>();
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            con = dataSource.getConnection();
            ps = con.prepareStatement(query);
            rs = ps.executeQuery();
            while(rs.next()){
                Workers workers = new Workers();
                workers.setWorkerId(rs.getInt("worker_id"));
                workers.setFirstname(rs.getString("firstname"));
                workers.setLastname(rs.getString("lastname"));
                workers.setWorkplaceId(rs.getInt("workplace_id"));
                empList.add(workers);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try {
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return empList;
    }
}

Worker unitTest:

代码语言:javascript
复制
   package com.bmp.bmp.service.implement;

import com.bmp.bmp.model.Workers;
import com.bmp.bmp.service.interfaces.WorkerInt;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

import static org.junit.Assert.*;

@RunWith(SpringJUnit4ClassRunner.class)
public class WorkerTest {
    @Autowired
    Worker worker = new Worker();

    @Test
    public void getAll() {
        List<Workers> workersList = worker.getAll();
        workersList.forEach(System.err::println);
    }

    @Test
    public void getById() {
        Workers workers = worker.getById(7);
    }
}

来自控制台的错误消息

代码语言:javascript
复制
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.bmp.bmp.service.implement.WorkerTest': Unsatisfied dependency expressed through field 'worker'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.bmp.bmp.service.implement.Worker' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:393)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.bmp.bmp.service.implement.Worker' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1506)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:583)
    ... 27 more
EN

回答 1

Stack Overflow用户

发布于 2018-08-26 19:09:59

缺少上下文配置会导致您的工作线程无法初始化,从而导致空指针

将ContextConfiguration名称替换为实际名称,它应该会自动连接

代码语言:javascript
复制
@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration(locations = { "classpath:META-INF/your-spring-context.xml" })
public class WorkerTest {
    @Autowired
    Worker worker;

    @Test
    public void getAll() {
        List<Workers> workersList = worker.getAll();
    }

    @Test
    public void getById() {
        Workers workers = worker.getById(7);
    }
}

编辑配置:如果没有使用XML文件,那么唯一的选择就是使用带有@的YourAppConfiguration.class的基于注解的Spring

为此,我们只需稍微更改ContextConfiguration即可

代码语言:javascript
复制
@RunWith( SpringJUnit4ClassRunner.class )
   @ContextConfiguration(classes=YourAppConfiguration.class, loader=AnnotationConfigContextLoader.class)
    public class WorkerTest {
        @Autowired
        Worker worker;

        @Test
        public void getAll() {
            List<Workers> workersList = worker.getAll();
        }

        @Test
        public void getById() {
            Workers workers = worker.getById(7);
        }
    }

如果仍然没有清除,则放弃自动布线,改用new运算符

代码语言:javascript
复制
@RunWith( SpringJUnit4ClassRunner.class )
        public class WorkerTest {

            Worker worker=new Worker();

            @Test
            public void getAll() {
                List<Workers> workersList = worker.getAll();
            }

                @Test
                public void getById() {
                    Workers workers = worker.getById(7);
                }
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52025557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档