Skip to content

Support timed transactional TestNG tests in the TestContext framework [SPR-6124] #10792

Closed
@spring-projects-issues

Description

@spring-projects-issues

Ed Randall opened SPR-6124 and commented

Status Quo

The Spring TestContext Framework (TCF) has never supported timed, transactional tests in conjunction with TestNG.

The reason for this is that the transaction managed by the TCF is only active for the currently executing thread; this behavior is in line with standard transaction semantics for Spring. Thus, since TestNG executes the timed test method in a new thread, the test code does not participate in the transaction managed by Spring.

Original Author's Description

If TestNG tests (which extend AbstractTransactionalTestNGSpringContextTests) are run with the timeOut attribute specified in the @Test annotation, they fail at EntityManager.flush() because there is no transaction.

If the timeout is set to zero, they pass.


Analysis

The invokeWithTimeout() method in TestNG's MethodInvocationHelper class spawns a new thread to execute a timed test. Spring's transaction support, however, registers the current transaction resources, etc. in a ThreadLocal which is bound to the thread of the test runner. Thus, the timed test method cannot see Spring's transaction.

Note that MethodInvocationHelper is deep in the internals of TestNG. Thus, it might be difficult to resolve this issue.


Deliverables

  1. Determine if it is possible to integrate the TCF in TestNG so that Spring TestExecutionListeners (specifically TransactionalTestExecutionListener) are executed in the same thread as the timed test.
    • See the Analysis section for further details.

Further Resources


Affects: 2.5.6, 3.0.5, 3.1.2

Attachments:

Issue Links:

Referenced from: commits 1b92a2f

3 votes, 6 watchers

Metadata

Metadata

Assignees

No one assigned

    Labels

    in: testIssues in the test modulestatus: bulk-closedAn outdated, unresolved issue that's closed in bulk as part of a cleaning process

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions