Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • May 16 21:21

    github-actions[bot] on gh-pages

    Publish javadoc/2.2-SNAPSHOT (compare)

  • May 16 21:15
    szpak milestoned #1468
  • May 16 21:15
    szpak milestoned #1472
  • May 16 21:14
    szpak closed #1471
  • May 16 21:14
    szpak commented #1471
  • May 16 21:13
    szpak commented #1472
  • May 16 21:13

    szpak on master

    Make EnableSharedInjection publ… (compare)

  • May 16 21:13
    szpak closed #1472
  • May 16 21:10
    erdi commented #1471
  • May 16 20:05
    szpak commented #1471
  • May 16 20:05
    szpak commented #1471
  • May 16 18:31
    dependabot[bot] labeled #1473
  • May 16 18:31

    dependabot[bot] on gradle

    Bump org.gradle.test-retry from… (compare)

  • May 16 18:31
    dependabot[bot] opened #1473
  • May 16 15:20
    jonnybot0 commented #1471
  • May 16 15:16
    jonnybot0 opened #1472
  • May 15 20:36
    alopukhov edited #1469
  • May 13 13:01
    erdi labeled #1471
  • May 13 13:01
    erdi opened #1471
  • May 10 17:17
    alopukhov edited #1469
James Hardwick
@jamesdh
We have an asynchronous integration test against a GCP PubSubEmulator running via TestContainers. We @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
James Hardwick
@jamesdh
Strangely enough, if running with IntelliJ's debugger on the gradle test task, the test passes every time. If running via gradle via CLI or within IntelliJ without the debugger, it fails most of the time on our dev machines, but passes in CI.
If running the test solo, regardless of debug/run mode, it passes every time.
James Hardwick
@jamesdh
It appears that if another test which @Autowired the same bean runs first, then the 2nd test that uses @SpringSpy doesn't actually get the SpockMock
But if the test containing the @SpringSpy runs first, then it does
James Hardwick
@jamesdh
So this ended up being unrelated to Spock. Had to do with the fact @SpringBootTest would launch a new application context with every spec, and therefore multiple instances of our subscribing bean would be registered with the PubSub emulator and could continue to receive messages even though our tests had moved on to an entirely different context and instance of the same bean. That in turn meant that the wrong bean may actually receive the message, and hence too few invocations.
Sergey Teplov
@serjteplov

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

8 replies
Vladimir Orany
@musketyr
Hi, I'm finally migrating to 2.0 (sight) and I'm facing a following issue: I have existing trait with methods annotated with @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?
Vladimir Orany
@musketyr
thanks @kriegaex! I wonder if this is something new - I can’t see it in the 1.3 documentation. anyway I’ll try to figure another approach then.
Alexander Kriegisch
@kriegaex
Besdides, if you are talking about @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, the Spock 2 manual just mentions it because it is some kind of FAQ, but actually it is a Groovy issue, not a Spock one.
So it is not new at all
If it worked in 1.3., you were just lucky. Even more so if you mixed Spock with JUnit 4 annotations.
It was wrong to use them to begin with.
Maybe you want to read the excellent Spock manual, you will find all this information and much more in there. But of course it is fine to ask here, too.
Vladimir Orany
@musketyr

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

https://github.com/grails/grails-testing-support/tree/master/grails-web-testing-support/src/main/groovy/grails/testing/web

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.

Krystian Matysiak
@KrystianMatysiak

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.

Alexander Kriegisch
@kriegaex
@KrystianMatysiak: The error message tells you what to do: You need to implement both abstract nethods in your concrete spec, not just one of them. As far as I can see from your fragmentary code, this is a basic Java or Groovy problem, completely unrelated to Spock.
Leonard Brünings
@leonard84
Johannes Gottschalk
@johannesgottschalk
Hi everyone, my name is Johannes. I am a test engineer who likes to work with Spock. I would very much like to contribute to the development of the framework and would like to know, what would be the most helpful way that I could contribute. From testing to coding I am happy to do what ever is needed and am looking forward to hear from you. Kind regards 🦄
2 replies
Alpharius12
@Alpharius12
Hey everyone, just quick question if I may. I started using spock recently for testing purposes and I am just wondering does spock support annotations like one that we can find in testng? Example: @Test({groups = Api, Slow, Fast}, description = "some clever description")
Or I need to create something like this using spockconfig? Thank you!
2 replies
DmitriyShakshin
@DmitriyShakshin
Hello everyone! Could you help me with CompileStatic? I have a problem with Adopt OpenJDK 11, Spock 2.0.0, Groovy 3.0 and Static Compile Tests. I can't use inner static builder class. Also I got exception unknown variables when i use parametherized tests
2 replies
pdargel
@pdargel
Hey, I'm new to spock and just read the documentation. I tried the @Issue extension with a valid url but nothing happened. What is supposed to happen there? should the url be part of the output if the feature fails? Is there a way to get Intellij to recognize them?
1 reply
venky
@venky6669
Hi Team, Does anyone know what versions of Groovy and spock are compatible with JDK 17 ?
1 reply
allforone
@allforone
哪位老哥给个和spring融合的demo
2 replies
Boris Petrov
@boris-petrov

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?!

26 replies
I hit this trying to debug another issue with 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.
balavivek143
@balavivek143

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 ?

1 reply
Juliane Hochstein
@exwima
Hi everyone! As a part-time student in computer science, I wrote a short paper about Spock for university last term and really liked how it made me think about writing tests. :-) So somehow I volunteered to give a talk about Spock in a public lecture series at the city library of Stuttgart, Germany. Due to the pandemic, the talk will now happen online on this thursday, see https://www.cccs.de/events/202201-testframework-spock/ (text in German, like my talk). Maybe someone here is interested? Please note: I am really no expert in programming or unit testing and still a beginner at Spock myself, so the talk will only be a basic introduction for other people who might be interested in learning about Spock, too.
5 replies
Roland Tepp
@roland-tepp:matrix.org
[m]

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.

Leonard Brünings
@leonard84
It is probably caused by some re-ordering caused by the 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.
Roland Tepp
@roland-tepp:matrix.org
[m]
Yeah. Quite possible. there's a ton of closure based model building DSL going on in the set'up phase and those set-up closures are the ones that throw an NPE.
sebastian-rembisz-jorsek
@sebastian-rembisz-jorsek
Do you have any plans do add module for Quarkus? Something similar to Spring module?
Leonard Brünings
@leonard84
Not really, I've no experience with Quarkus, but I would help out if Quarkus wants to add Spock support.
Jim Renwick
@j1mmi:matrix.org
[m]
Hi, this is a dumb question but I'm trying to find the import location for 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?
1 reply
Marcin Grzejszczak
@marcingrzejszczak

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?

3 replies
Luís Gonçalves
@luisgoncalves

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 Statementmultiple 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!

Renato Athaydes
@renatoathaydes
Hi @luisgoncalves :D long time no see.
I think you can replace the repeating annotation with something like where: i << (0..100)
1 reply
but @Concurrent we'll probably have to write ourselves.. that didn't work on Spock anyway, as far as I know...
racsogl
@racsogl:matrix.org
[m]

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

Alexander Kriegisch
@kriegaex
I am ready to help you, if you would please be so kind to provide a full MCVE. With fragments of a test using a handful of classes, all of which I cannot see, and even only a single line of code from the class under test, it is hard to say anything intelligent about your problem.
racsogl
@racsogl:matrix.org
[m]

: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

Alexander Kriegisch
@kriegaex
Something seems to be wrong with the editing feature of whatever platform you use in order to edit messages here, because they get duplicated. I see the same message 3x now. BTW, would you mind using code blocks in GitHub markdown format (fenced blocks using three backticks)? Your posts are barely readable.
Whatever this matrix thing of yours does, it does not edit messages correctly. Maybe you want to use a web interface or a dedicated app for Gitter.
racsogl
@racsogl:matrix.org
[m]

: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

sorry, I hope it is clearer now