这是一个头脑风暴:我有一个Arquillian测试类,有8个测试。如果我一次执行其中的4个,它们都可以工作,但如果我添加一个其他测试,则最后一个测试失败。如果我执行所有8个,则最后4个失败。如果我改变了顺序,那么最后4个仍然失败。没有押韵也没有理由去哪个被执行,哪个失败除了那个。
(如果我将一半的测试放在另一个类中,也是如此。然后这两个类自己执行正常,但如果它们作为相同运行配置的一部分启动,则第二个将失败所有测试。 )
错误发生在@Before
方法中,所以这里是:
@PersistenceContext
private EntityManager em;
@Inject
private UserTransaction transaction;
@Before
public void setUp() throws Exception {
Assert.assertNotNull("EntityManager cannot be null!", this.em);
this.transaction.begin();
this.em.createNativeQuery(MY_SCRIPT_1).executeUpdate();
this.em.createNativeQuery(MY_SCRIPT_2).executeUpdate();
this.transaction.commit();
}
MY_SCRIPT_X
是一堆代码,但相关部分可能是:
-- MY_SCRIPT_1
DROP SCHEMA IF EXISTS scheme1 CASCADE;
DROP SCHEMA IF EXISTS scheme2 CASCADE;
DROP SCHEMA IF EXISTS public CASCADE;
CREATE SCHEMA public;
-- MY_SCRIPT_2
CREATE TABLE scheme1.dbconfig (
propkey character varying NOT NULL,
propvalue character varying NOT NULL,
CONSTRAINT dbconfig_pkey PRIMARY KEY (propkey)
);
COMMENT ON TABLE scheme1.dbconfig IS 'global database configuration properties';
INSERT INTO scheme1.dbconfig VALUES
('initialized', true),
('version', 2);
如果我只使用一个大脚本[em.createNativeQuery(MY_SCRIPT_1 + MY_SCRIPT_2)
],则不会发生错误,即使表scheme1.dbconfig
仅在其中一个文件中引用。
我得到的所有错误信息是:
09:20:18,243 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper](默认任务-24)错误:关系“scheme1.dbconfig”不存在 位置:169
我不知道位置169在哪里(忽略所有注释,第169位应该在propkey
的R和O之间,这似乎很奇怪)。但是我在执行完整个类并检测到上述错误后检查了数据库,表scheme1.dbconfig
确实存在。
我知道,这是一个奇怪的具体问题,但问题可能是什么(甚至如何进一步调试)?
更多信息:
我需要重现错误的是( beans.xml 是一个默认的空文件, persistence.xml 只有{{1} }}):
jta-data-source
答案 0 :(得分:0)
我在前两年一次又一次地重复这个问题。唯一可靠的工作如下:
答案 1 :(得分:-1)
不,Arquillian将在单个文件中运行所需数量的测试,或者至少在JUnit(或TestNG)停止运行之前运行。以下是Apache DeltaSpike的一些示例,其中运行了四个以上的测试:
您的设置中必须包含导致问题的内容。