== Why is this an issue?

In tests configured with Spring's `@Transactional` annotation, methods annotated with `@BeforeTransaction` or `@AfterTransaction` must be void and have no arguments.
These methods are executed before or after a transaction, respectively.
Deviating from this contract by having a non-void return type or accepting arguments will cause Spring to throw a runtime error.

== How to fix it

Ensure that methods annotated with `@BeforeTransaction` or `@AfterTransaction` have a void return type and do not accept any arguments.

=== Code examples

==== Noncompliant code example

[source,java,diff-id=1,diff-type=noncompliant]
----
@Transactional
public class TransactionalTest {

    @BeforeTransaction
    public String setupTransaction(int x) { // non-compliant, method should be void and have no argument
        // Setup logic
    }

    @AfterTransaction
    public int cleanupTransaction(int x) { // non-compliant, method should be void and have no argument
        // Cleanup logic
    }
}
----

==== Compliant solution

[source,java,diff-id=1,diff-type=compliant]
----
@Transactional
public class TransactionalTest {

    @BeforeTransaction
    public void setupTransaction() {
        // Setup logic
    }

    @AfterTransaction
    public void cleanupTransaction() {
        // Cleanup logic
    }
}
----

== Resources
=== Documentation
* Spring - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/transaction/BeforeTransaction.html[BeforeTransaction]
* Spring - https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/context/transaction/AfterTransaction.html[AfterTransaction]
