小编Tom*_*Tom的帖子

添加一个TestExecutionListener

我知道,如果需要使用精确的实现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,而不必从默认配置中显式声明每个侦听器,也不必“覆盖”默认配置?

java testing spring spring-test

5
推荐指数
2
解决办法
2804
查看次数

Hibernate为OneToMany集合检索null

我的问题是,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)

java hibernate one-to-many hibernate-onetomany

3
推荐指数
1
解决办法
4632
查看次数