on 2022 Aug 01 2:50 PM
Hello,
I use unit tests for groovy scripts, as shown here:
- https://blogs.sap.com/2017/10/06/how-do-you-test-your-groovy-scripts/
- https://blogs.sap.com/2018/01/24/cpis-groovy-meets-spock-to-boldly-test-where-none-has-tested-before...
In the script I want to log some information (I use messageLogFactory.getMessageLog). At the time of test execution I get an error:
groovy.lang.MissingPropertyException: No such property: messageLogFactory for class: build-query-params
How can I get rid of the error? How can I inject messageLogFactory into the message?
Best Regards,
Tobiasz
Request clarification before answering.
Somehow I managed to achieve what I wanted (with the help of a colleague ;)).
A helpful resource is here:
http://docs.groovy-lang.org/latest/html/documentation/guide-integrating.html#_sharing_data_between_a...
And below is my sample implementation of the cpi test:
package src.test.groovy
import com.sap.gateway.ip.core.customdev.processor.MessageImpl
import com.sap.gateway.ip.core.customdev.util.Message
import com.sap.it.api.msglog.MessageLog
import com.sap.it.api.msglog.MessageLogFactory
import spock.lang.Shared
import groovy.transform.Field
//import com.sap.it.op.agent.mpl.factory.impl.MessageLogFactoryImpl
class SpocSpecBuildQueryParams extends spock.lang.Specification {
@Shared
GroovyShell shell = new GroovyShell()
@Shared
Script script
@Shared
File testFile1
private Message msg
def setupSpec() {
// Load Groovy Script
MessageLogFactory messageLogFactory
def sharedData = new Binding()
messageLogFactory = new MessageLogFactoryImpl()
sharedData.setVariable("messageLogFactory", messageLogFactory)
script = shell.parse(new File("src/main/resources/script/build-query-params.groovy"))
script.setBinding(sharedData)
testFile1 = new File('src/test/groovy/in02.xml')
}
def setup() {
this.msg = new MessageImpl()
}
def "example test - message body is unchanged"() {
given: "the message body is provided with initial value"
this.msg.setBody(testFile1.text)
when: "we execute the Groovy script"
script.processData(this.msg)
then: "the message body is the same as input message body"
this.msg.getBody() == testFile1.text
}
}
class MessageLogFactoryImpl implements MessageLogFactory {
@Override
MessageLog getMessageLog(Object o) {
return new MessageLogImpl()
}
}
class MessageLogImpl implements MessageLog {
@Override
void setStringProperty(String s, String s1) {
}
@Override
void setIntegerProperty(String s, Integer integer) {
}
@Override
void setLongProperty(String s, Long aLong) {
}
@Override
void setBooleanProperty(String s, Boolean aBoolean) {
}
@Override
void setFloatProperty(String s, Float aFloat) {
}
@Override
void setDoubleProperty(String s, Double aDouble) {
}
@Override
void setDateProperty(String s, Date date) {
}
@Override
void addAttachmentAsString(String s, String s1, String s2) {
}
@Override
void addCustomHeaderProperty(String s, String s1) {
}
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
75 | |
30 | |
9 | |
8 | |
7 | |
6 | |
6 | |
5 | |
5 | |
5 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.