我有一个在没有单元测试的情况下正常运行的应用程序,但唉,这是正确的做法。
我正在尝试为测试实现本地HSQL DB。我知道db已经创建并运行了脚本文件,因为如果出现问题,我会收到SQL错误。当我尝试运行测试时,我得到0结果,我认为我输入了记录。同样,这都通过浏览器进行了测试,因此我将展示的Service
代码正常运行。此外,这可能是一个糟糕的测试,但我不是为了这个。
以下是测试:
@Autowired
OfficeService officeServiceImpl;
@Test
@Transactional
public void thatRecordIsSaved() {
List <Office> offices = officeServiceImpl.findAll();
Office o = offices.get(0);
o.setOfficeName("Test office");
officeServiceImpl.save(o);
List<Office> officesAfter = officeServiceImpl.findAll();
Office lastLocation = officesAfter.get(officeServiceImpl.findAll().size() - 1);
assertEquals("Test office", lastLocation.getOfficeName());
}
这是插入声明:
INSERT INTO office0_ (active_indicator, facility_code, office_code, office_name, head_count, lattitude, longitude, lert_indicator, country, addr1, addr2, addr3, city, state_or_province, postal_code, updated_at, created_at)
VALUES(1, '1','1','xyz','2',1.11111,2.22222,0,'US','fake address', '', '', 'x', 'YZ', '12345', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
没有错误表明此记录未被添加,并且没有任何消息表明已添加该记录。任何想法在这里发生了什么?
答案 0 :(得分:0)
当两个Java进程实际上访问两个不同的数据库时,通常会出现这种问题。
要避免此问题,请使用连接属性ifexists=true
或备用属性create=false
,以使依赖于数据库的连接预先存在。如果数据库尚不存在,连接尝试将失败。
file:
数据库的URL理想情况下应该是绝对URL。相对URL是相对于Java进程的执行点,通常指向不同的绝对路径。