[Enhancement]: Document why singleton containers are required under Spring's test context caching
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 1/5
- Temps estimé
- Moins d'une heure
- Accessibilité débutants
- 85/100
- Type d'issue
- Documentation
- Clarté
- Clairement spécifiée
- Activité
- Calme
- Domaine
- documentation, testing
Piste de recherche
Commencez par la section "Singleton containers" de Manual container lifecycle control et comparez-la avec la documentation de @Testcontainers et @Container sur la page de JUnit 5. Ajoutez une courte note expliquant pourquoi les conteneurs utilisés sous @SpringBootTest doivent survivre au cache de contexte de Spring et pourquoi le pattern du static initializer dépend de Ryuk à la sortie de la JVM ; la documentation est terminée lorsque le class-to-class failure scenario et sa justification sont clairs.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Module
Core
Proposal
The gap
The "Singleton containers" section in Manual container lifecycle control shows the static-initialiser pattern, and the JUnit 5 page documents @Testcontainers / @Container. Neither explains the failure that makes the singleton pattern necessary under @SpringBootTest, and the symptom is misleading enough that it costs people real time.
The failure
Spring caches the application context across test classes. @Testcontainers ties container lifecycle to the test class. Those two facts conflict:
- Test class A runs. The container starts. Spring builds a context pointing at the container's mapped port.
- Class A finishes.
@Testcontainersstops the container. - Class B runs. Spring reuses the cached context, still pointing at the container that was just shut down.
- Every test in class B fails with connection errors.
The misleading part is that class A passes and class B fails, and the error mentions nothing about containers. It reads like test pollution or an ordering problem, so that is where people go looking first.
Current documentation
Manual container lifecycle control says only: "Sometimes it might be useful to define a container that is only started once for several test classes." The JUnit 5 page does not mention Spring at all. So the pattern is documented, but the reason for it is not.
Proposal
Add a short note to the Singleton containers section: under @SpringBootTest, container lifecycle has to outlive Spring's context cache. That is why the containers are started in a static initialiser and deliberately never stopped — Ryuk reaps them at JVM exit, so nothing leaks.
I hit this building a Spring Boot project with Postgres and RabbitMQ containers and lost a while to it. Happy to open a PR if you would take it.
- Langage dominant
- Java
- Étoiles
- 8.7k
- Forks
- 1.9k
- Merge moyen
- 2 j 17 h
- PR mergées (30 j)
- 9
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de testcontainers/testcontainers-java
-
type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
testcontainers/testcontainers-java#11997 · 1 commentaire ·
-
type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
testcontainers/testcontainers-java#11941 ·
-
type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
testcontainers/testcontainers-java#11829 · 1 commentaire ·
-
type/enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
testcontainers/testcontainers-java#11578 ·
-
help wanted type/feature
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
testcontainers/testcontainers-java#8657 · 4 commentaires ·
Toutes les issues de testcontainers/testcontainers-java
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
bug needs triage
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 94/100
objectionary/hone-maven-plugin#1061 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
spring-projects/spring-modulith#1895 ·