"显示java.lang.NullPointerException"使用DBUnit配置单一测试时,我的通用Dao中出错

时间:2014-07-31 11:58:19

标签: mysql nullpointerexception persistence dao dbunit

我在以下行中收到“java.lang.NullPointerException”错误:

miIdioma=miDao.find(Idioma.class, "playa");

miIdioma是de class“Idioma”的一个对象,它由atrributes“palabra”和“idioma”组成

Dao文件名为IIdiomaDao.java,我想使用它的方法:

public <T> T find(Class<T> clazz, Serializable id) {
        return entityManager.find(clazz, id);
    }

要获得对此方法的访问权限,我在原始文件中声明了变量miDao

private IIdiomaDao miDao;

最后,我正在使用此方法获取访问权限

miIdioma=miDao.find(Idioma.class, "playa");

我知道当一个变量未初始化时会显示此错误,但是我将数据库连接到我的项目并且应该上传数据库数据。为了执行单一测试,我遵循以下步骤:

  1. 我连接了数据库

    public class IdiomaDaoTest {
    
      private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
      private static final String JDBC_URL = "jdbc:mysql://localhost:3306/diccionario";
      private static final String USER = "root";
      private static final String PASSWORD = "mypassword";
    

    }

  2. 我导入了红色数据

  3.   

    块引用

    public void importDataSet() throws Exception {
          IDataSet dataSet = readDataSet();
          cleanlyInsert(dataSet);
      }
    
      private IDataSet readDataSet() throws Exception {
          return new FlatXmlDataSetBuilder().build(new File("/home/inta/workspace/JPAconPruebasUnitarias/src/test/sources/FlatXmlDataSet.xml"));
      }
    
      private void cleanlyInsert(IDataSet dataSet){
          IDatabaseTester databaseTester;
        try {
            databaseTester = new JdbcDatabaseTester(JDBC_DRIVER, JDBC_URL, USER, PASSWORD);
            databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
            databaseTester.setDataSet(dataSet);
            databaseTester.onSetup();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
      }
    

    注1:在这里,我想数据库已经上传,因此对其进行了初始化。

    我的问题是:为什么miDao指向Null?我做错了什么?

    注2:我的数据集是:

    <!DOCTYPE dataset SYSTEM "my-dataset.dtd" >
    <dataset>
        <idioma palabra="playa" idioma="español"/>
        <idioma palabra="beach" idioma="ingles"/>
        <idioma palabra="platja" idioma="catalan"/>
    </dataset>
    

    非常感谢,这个社区摇滚!

1 个答案:

答案 0 :(得分:2)

问题就在这里。

private IIdiomaDao miDao;// you have declare the miDao

但不要初始化它。

然后你会在这里得到NullPointerException

miIdioma=miDao.find(Idioma.class, "playa"); // NullPointerException since
                                            // miDao is null

初始化miDao以避免NullPointerException