Я пытаюсь протестировать некоторые из моих конечных точек, но для этого мне нужно «смоделировать» некоторые сторонние веб-зацепки. Все отлично работает, кроме той части, где я использую сервис для обновления данных для входящего webhook.
Исключение, которое я получаю:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: mz.server.hibernate.model.PlaceSubscriptionEntity.placeSubscriptionEvents, could not initialize proxy - no Session
at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:597)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:216)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:576)
at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:147)
at org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:188)
at java.util.Spliterators$IteratorSpliterator.estimateSize(Spliterators.java:1821)
at java.util.Spliterator.getExactSizeIfKnown(Spliterator.java:408)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:497)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
Все мои живые тесты расширяют этот абстрактный класс здесь:
@FlywayTest
@RunWith(SpringRunner.class)
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
properties = "spring.profiles.active=test"
)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
FlywayTestExecutionListener.class
})
public abstract class AbstractLiveTest {
@Value("${security.jwt.client-id}")
protected String clientId;
@Value("${security.jwt.client-secret}")
protected String clientSecret;
@Value("${security.jwt.client-secret-plain}")
protected String clientSecretPlain;
@Value("${server.port}")
protected Integer serverPort;
@Autowired
protected TestRestTemplate restTemplate;
}
Как предложено в другом ответе, я попытался добавить @Tranasctional
к своим методам модульного тестирования:
@Test
@Transactional
public void whenCreateSubscription() throws Exception {
// ..
}
но это не имеет никакого эффекта.
Есть идеи?