我知道,如果需要使用精确的实现TestExecutionListener,它将阻止加载默认的TestExecutionListeners。如果我的测试课是
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({MyCustomTestExecutionListener.class})
@ContextConfiguration(locations = { "classpath:test-ApplicationContext.xml" })
public class CabinetMembershipServiceImplTest {
...
}
Run Code Online (Sandbox Code Playgroud)
MyCustomTestExecutionListener 将是唯一加载的侦听器,这会使我的测试执行失败。
当我启动测试并指定任何TestExecutionListener并挖掘Spring的日志时,我可以找到:
getDefaultTestExecutionListenerClassNames :
Loaded default TestExecutionListener class names from location [META-INF/spring.factories]:
[org.springframework.test.context.web.ServletTestExecutionListener,
org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener,
org.springframework.test.context.support.DependencyInjectionTestExecutionListener,
org.springframework.test.context.support.DirtiesContextTestExecutionListener,
org.springframework.test.context.transaction.TransactionalTestExecutionListener,
org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
因此,如果要添加TestExecutionListener,则需要在测试类上指定(除了所需的实现之外)所有这些默认的TestExectionListeners:
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({
ServletTestExecutionListener.class,
DirtiesContextBeforeModesTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class,
SqlScriptsTestExecutionListener.class,
MyCustomTestExecutionListener.class})
@ContextConfiguration(locations = { "classpath:test-ApplicationContext.xml" })
public class CabinetMembershipServiceImplTest {
...
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以添加一个(或多个)TestExecutionListener,而不必从默认配置中显式声明每个侦听器,也不必“覆盖”默认配置?
我的问题是,hibernate 在获取以下对象上的实例时的值中检索null@OneToMany Set organizationMemberCollection:
UserAccount.java:
@Entity
@Table(name="USER_ACCOUNT")
public class UserAccount {
@Id
@Column(name = "id", nullable = false)
@SequenceGenerator(name = "generator", sequenceName = "USER_ACCOUNT_id_seq", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator")
private Long id;
@Column(name = "EMAIL", nullable = false)
private String email;
@Column(name = "PASSWORD_HASH")
private String passwordHash;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "userAccount")
private Set <OrganizationMember> organizationMemberCollection;
...
/*
* getters and setters
*/
}
Run Code Online (Sandbox Code Playgroud)
这是"拥有"该关联的对象:
OrganizationMember.java:
@Entity
@Table(name="ORGANIZATION_MEMBER")
public class OrganizationMember{
@Id …Run Code Online (Sandbox Code Playgroud)