使用 DBUnit 配置单一测试时,我的通用 Dao 中出现“java.lang.NullPointerException”错误 [重复]
Posted
技术标签:
【中文标题】使用 DBUnit 配置单一测试时,我的通用 Dao 中出现“java.lang.NullPointerException”错误 [重复]【英文标题】:"java.lang.NullPointerException" error in my generic Dao while configuring unitary testing with DBUnit [duplicate] 【发布时间】: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");
我知道当变量未初始化时会显示此错误,但我将数据库连接到我的项目并且应该上传数据库数据。为了执行单一测试,我按照以下步骤操作:
我连接了数据库
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";
我导入了红色数据
块引用
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>
非常感谢,这个社区很棒!
【问题讨论】:
特别是,我写了这个答案 - ***.com/a/24347569/139985 - 解释如何追查 NPE 的原因。 为什么这个问题的投票率如此之低?是的,它是重复的。是的,这完全是初学者的话题。但是,不,这个问题质量不错。 @Absurd-Mind - 你有一个有效的观点。不幸的是,这正是这里人们的行为方式。 @StephenC 虽然我同意这个问题不值得那么多反对票,但反对票按钮上的工具提示说“这个问题没有显示任何研究工作;它不清楚或没有用” -与问题本身的质量差无关,虽然问题写得很好,但它确实缺乏研究工作(OP 可以通过简单地在 Google 上搜索找到“什么是 NullPointerException,以及如何解决它?”。 【参考方案1】:问题就在这里。
private IIdiomaDao miDao;// you have declare the miDao
但不初始化它。
然后你会在这里得到NullPointerException
miIdioma=miDao.find(Idioma.class, "playa"); // NullPointerException since
// miDao is null
初始化miDao
以避免NullPointerException
【讨论】:
以上是关于使用 DBUnit 配置单一测试时,我的通用 Dao 中出现“java.lang.NullPointerException”错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
DBUnit 错误 - 缺少以下 bean 之一:[dbUnitDatabaseConnection, dataSource]