github-actions[bot] on gh-pages
Publish javadoc/2.2-SNAPSHOT (compare)
szpak on master
Make EnableSharedInjection publ… (compare)
dependabot[bot] on gradle
Bump org.gradle.test-retry from… (compare)
@SpringSpy
the bean that receives the message. Occasionally this test fails with "too few invocations" on the spied on bean. Upon further inspection, when it fails, the bean appears as class GCPPubSubReceiver
and when it passes, as class GCPPubSubReceiver$SpockMock
@SpringSpy
runs first, then it does
Hi there!
I have a bug suggestion regarding using of DetachedMockFactory to test spring-cloud-stream functions.
When spring test context is created by TestChannelBinderConfiguration and depency is created by DetachedMockFactory, the mocking itself didn't happen. Mock has been created, but method call isn't. Here is screenshot: https://i.stack.imgur.com/4G74V.png
In the test wrote via junit5 all is good and working.
I created sample project to demonstrate this issue: https://github.com/serjteplov/demo-kafka-mock.git
@Before
and @After
which got executed before/after feature method calls in 1.3
but when I migrate the project to 2.0
and change the annotations to @BeforeEach
and @AfterEach
then these method are ignored. Am I missing something?
@Before*
and @After*
annotations from JUnit, you are not meant to use those in connection with Spock at all, mixing two technologies. Spock has its own mechanisms to cover those topics, namels setup
, setupSpec
, cleanup
, cleanupSpec
methods.
well, JUnit annotations were supported since 0.6
https://spockframework.org/spock/docs/2.0/all_in_one.html#_junit_fixture_annotations
and traits were the base of the Grails testing support
traits + JUnit annotations worked well and I was able to avoid writing custom extensions.
I will re-read the docs. I can see there’s a lot of useful new stuff since the time I first read it.
Hello everyone,
I'm struggling with Spock test inheritance problem. Basically I would like to create DomainEntitySpec class containing abstract methods which has to be overriden in concrete Spec classes:
abstract class DomainEntitySpec extends Specification {
abstract def "should throw validation error"()
abstract def "should create minimal object"()
}
class SendAllocationCostsRequestSpec extends DomainEntitySpec {
def "should throw validation error"() {
...
}
However I got:
Can't have an abstract method in a non-abstract class. The class 'com.ista.ade.gateway.domain.allocationcost.entity.SendAllocationCostsRequestSpec' must be declared abstract or the method 'java.lang.Object should create minimal object()' must be implemented.
@ line 12, column 1.
Hi all, I'm having troubles with additionalInterfaces
. Using 2.1-M2
. I don't understand why this doesn't call the method foo
:
class A {}
class B {}
interface C { B foo() }
...
def a = Stub(A, additionalInterfaces: [C]) {
foo() >> { println 2; new B() }
}
println(a instanceof C)
def b = a.foo()
println b.getClass()
This prints true
and then class java.lang.Object
. 2
is not printed. Why isn't this calling my stubbed method?!
additionalInterfaces
where the method is called and I return a nice value but I get a NPE in org.spockframework.gentyref.GenericTypeReflector:73
- java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "type" is null
.
Hello Every one.. We are using spock core version 1.3-groovy-2.5 version and running few of our SpringBootTest using EmbeddedSpecRunner.groovy with RunListeners.
EmbeddedSpecRunner runner = new EmbeddedSpecRunner();
runner.setListeners(Collections.singletonList(new TextListener(System.out)));
When we are upgrading to 2.1-M2-groovy-3.0, we are seeing setListeners are not available ! also seeing in the source code, listener array variable got removed in the commit 693832c3cfaeebf349025002561acc556d7dbcae
Now how to add any run listener with EmbeddedSpecRunner ?
Hi, I am getting a weird issue with Spock where as soon as I declare throws
in my then:
block, the test starts to fail with a NullPointerException.
If I remove the throws
assertion, the test fails with the expected (UnsupportedOperationException) exception as it should.
throws
special handling, but without any sample code I can't help you. You can however use https://gwc-experiment.appspot.com/ to look at the AST to see the transformed code and where the issue is.
callRealMethod()
- my IDE can't locate it and I can't see any import statements in the documentation...can someone point me to where the method lives?
Hi! I'm trying to bump Spring Cloud Contract to use latest Boot 3.0.0 and Framework 6.0.0. So all of my Spock Spring tests are failing because NPEs. That means that the tests have not had their Spring Context registered. I've started to debug things and apparently org.spockframework.spring.SpringExtension#isSpringSpec
returns false
now. So I've added temporarily the @ContextConfiguration
annotation to make that method return true
. I've started getting more problematic exceptions like this one
2022-01-21 11:05:46.899 ERROR 67468 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.NoClassDefFoundError: org/springframework/beans/factory/config/InstantiationAwareBeanPostProcessorAdapter
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at org.spockframework.spring.mock.SpockContextCustomizer.customizeContext(SpockContextCustomizer.java:43)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextCustomizerAdapter.initialize(SpringBootContextLoader.java:294)
at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:599)
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:367)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:301)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:124)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:123)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124)
at org.springframework.cloud.contract.wiremock.WireMockTestExecutionListener.applicationContextBroken(WireMockTestExecutionListener.java:120)
at org.springframework.cloud.contract.wiremock.WireMockTestExecutionListener.beforeTestClass(WireMockTestExecutionListener.java:43)
at org.springframework.test.context.TestContextManager.beforeTestClass(TestContextManager.java:213)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
As for this particular problem this is Spring's corresponding issue spring-projects/spring-framework#25165 . Anyways, the question is has anyone checked it there's a way to make Spcok + JUnit5 + Spring Framework 6 work together?
Hi all!
I'm upgrading Spock to v2 and there are tests that use JUnit 4 rules, so I've added the "JUnit 4 Module". One of the rules in use is TempusFugit's @Repeating
, which internally evaluates JUnit's Statement
multiple times. This results in an error in Spock:
java.util.NoSuchElementException
at java.base/java.util.LinkedList.removeFirst(LinkedList.java:274)
at org.spockframework.mock.runtime.MockController.leaveScope(MockController.java:76)
I wrote an extension that tries to do invocation.proceed()
twice and I get the same error. Is this the expected behavior? I read somewhere that spec instances can only be used once... so I guess that's related?
If the above is by design, what would be an approach to implement something like TempusFugit's @Repeating
/ @Concurrent
rules using "pure" Spock? Thanks in advance!
@Concurrent
we'll probably have to write ourselves.. that didn't work on Spock anyway, as far as I know...
hello
I have this code to test
app = Optional.ofNullable(receiverCompany.getApplication()).orElse(getDefaultApp());
and my test is
given:
def application = new GenericApp()
def receiverCompanyDTO = new ReceiverCompanyDTO(
application: application
)
ApplicationService applicationService = new ApplicationServiceImpl( Mock (ApplicationsDAO))
when:
def result= applicationService.getByReceiverCompany(receiverCompanyDTO)
then:
result != null
always enters through orElse , I don’t know how to make for that the variable app to have the value of receiverCompanyDTO
Can we help me with this issue?
Thanks a lot
:point_up: Edit: hello
I have this code to test
app = Optional.ofNullable(receiverCompany.getApplication()).orElse(getDefaultApp());
and my test is
given:
def application = new GenericApp()
def receiverCompanyDTO = new ReceiverCompanyDTO(
application: application
)
ApplicationService applicationService = new ApplicationServiceImpl( Mock (ApplicationsDAO))
when:
def result= applicationService.getByReceiverCompany(receiverCompanyDTO)
then:
result != null
always enters through orElse , I don’t know how to make for that the variable app to have the value of receiverCompanyDTO
Can we help me with this issue?
Thanks a lot
:point_up: Edit: hello
I have this code to test
app = Optional.ofNullable(receiverCompany.getApplication()).orElse(getDefaultApp());
and my test is
given:
def application = new GenericApp()
def receiverCompanyDTO = new ReceiverCompanyDTO(
application: application
)
ApplicationService applicationService = new ApplicationServiceImpl( Mock (ApplicationsDAO))
when:
def result= applicationService.getByReceiverCompany(receiverCompanyDTO)
then:
result != null
always enters through orElse , I don’t know how to make for that the variable app to have the value of receiverCompanyDTO
Can we help me with this issue?
Thanks a lot
:point_up: Edit: hello
I have this code to test
Where public class GenericApp extends Application {app = Optional.ofNullable(receiverCompany.getApplication()).orElse(getDefaultApp());
and my test is
given:
def application = new GenericApp()
def receiverCompanyDTO = new ReceiverCompanyDTO(
application: application
)
ApplicationService applicationService = new ApplicationServiceImpl( Mock (ApplicationsDAO))
when:
def result= applicationService.getByReceiverCompany(receiverCompanyDTO)
then:
result != null
always enters through orElse , I don’t know how to make for that the variable app to have the value of receiverCompanyDTO
Can we help me with this issue?
Thanks a lot
:point_up: Edit: hello
I have this code to test
Where public class GenericApp extends Application {
.......
}
@Override
public Application getByReceiverCompany(final ReceiverCompanyDTO receiverCompany) {
final Application app = Optional.ofNullable(receiverCompany).map(ReceiverCompanyDTO::getApplication)
.orElse(getDefaultApp());
return app;
}
and my test is
given:
def application = new GenericApp()
def receiverCompanyDTO = new ReceiverCompanyDTO(
application: application
)
ApplicationService applicationService = new ApplicationServiceImpl( Mock (ApplicationsDAO))
when:
def result= applicationService.getByReceiverCompany(receiverCompanyDTO)
then:
result != null
always enters through orElse , I don’t know how to make for that the variable app to have the value of receiverCompanyDTO
Can we help me with this issue?
Thanks a lot
:point_up: Edit: hello
I have this code to test
Where public class GenericApp extends Application {
.......
}
public class ApplicationService {
@Override
public Application getByReceiverCompany(final ReceiverCompanyDTO receiverCompany) {
final Application app = Optional.ofNullable(receiverCompany).map(ReceiverCompanyDTO::getApplication)
.orElse(getDefaultApp());
return app;
}
}
and my test is
given:
def application = new GenericApp()
def receiverCompanyDTO = new ReceiverCompanyDTO(
application: application
)
ApplicationService applicationService = new ApplicationServiceImpl( Mock (ApplicationsDAO))
when:
def result= applicationService.getByReceiverCompany(receiverCompanyDTO)
then:
result != null
always enters through orElse , I don’t know to make for that the variable app to have the value of receiverCompanyDTO
Can we help me with this issue?
Thanks a lot