【问题标题】:"java.lang.NullPointerException" error in my generic Dao while configuring unitary testing with DBUnit [duplicate]使用 DBUnit 配置单一测试时,我的通用 Dao 中出现“java.lang.NullPointerException”错误 [重复]
【发布时间】:2014-09-23 08:45:52
【问题描述】:

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

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

miIdioma 是属于“Idioma”类的对象,由属性“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. 我导入了红色数据

块引用

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>

非常感谢,这个社区很棒!

【问题讨论】:

  • 特别是,我写了这个答案 - stackoverflow.com/a/24347569/139985 - 解释如何追查 NPE 的原因。
  • 为什么这个问题的投票率如此之低?是的,它是重复的。是的,这完全是初学者的话题。但是,不,这个问题质量不错。
  • @Absurd-Mind - 你有一个有效的观点。不幸的是,这正是这里人们的行为方式。
  • @StephenC 虽然我同意这个问题不值得那么多反对票,但反对票按钮上的工具提示说“这个问题没有显示任何研究工作;它不清楚或没有用” -与问题本身的质量差无关,虽然问题写得很好,但它确实缺乏研究工作(OP 可以通过简单地在 Google 上搜索找到“什么是 NullPointerException,以及如何解决它?”。

标签: mysql nullpointerexception persistence dao dbunit


【解决方案1】:

问题就在这里。

private IIdiomaDao miDao;// you have declare the miDao

但不初始化它。

然后你会在这里得到NullPointerException

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

初始化miDao以避免NullPointerException

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多