Tag: groovy

在groovy中切一个字符串

我有一个18个字符的字符串,我想要字符2-8。 在python中,我可以这样做: sliceMe = “nnYYYYYYnnnnnnnnnn” print sliceMe[2:8] 版画 YYYYYY 我正在寻找一种在groovy中做同样事情的方法,并且每个解释都非常长。 什么是优雅的接受方式在groovy(或java)这样做?

在Java中嵌入Groovy(绑定)

我尝试将变量绑定到Groovy并从Groovy绑定到Java Java: Java代码: Binding binding = new Binding(); binding.setVariable(“SRESULT”, “foo”); GroovyShell gs = new GroovyShell(binding); gs.evaluate(script); String sResult = (String) gs.getContext().getVariable(“SRESULT”); System.out.println(“FROM GROOVY: ” + sResult); Groovy代码: class Est { static SRESULT public static void main(String[] args) { println ‘From Java: ‘+SRESULT SRESULT = ‘bar’ } } 输出: From Java: foo FROM GROOVY: foo 我的问题:我想在Groovy中更改SRESULT并可以访问Java中的Value。 […]

单元从Groovy测试用例测试Java类中的静态方法

我试图在groovy中编写一个用java编写的类的测试用例。 Java类(名称:Helper)中有一个静态方法,其中获取HttpClient对象并在其上调用executeMethod。 为了对这个类进行Unittest,我试图在groovy测试用例中模拟这个httpClient.executeMethod(),但是无法正确模拟它。 下面是Java类 public class Helper{ public static message(final String serviceUrl){ HttpClient httpclient = new HttpClient(); HttpMethod httpmethod = new HttpMethod(); // the below is the line that iam trying to mock String code = httpClient.executeMethod(method); } } 关于如何从groovyunit testing这个静态方法的任何想法。 由于httpClient对象是类方法中的对象,我如何在groovy测试用例中模拟这个对象? 这是我到目前为止的测试用例。我试图模拟为null,但没有发生…… void testSendMessage(){ def serviceUrl = properties.getProperty(“ITEM”).toString() // mocking to return null def […]

Spock框架:间谍问题

我在Spock中使用Spy有一个问题,它要么不能正常工作,要么我的理解是错误的,所以我试图弄清楚这一点。 考虑这段代码(Java): public class CallingClass { public String functionOne() { //does stuff return “one”; } public String functionTwo() { String one = functionOne(); return “some string ” + one; } } 现在我想测试一下这个事实,即functionTwo调用functionOne以及定义functionOne的返回值(想象一下,如果functionOne真的很复杂,我不想在我的测试中执行它只是想将它存根并将其设置为返回一定的值)。 为此,我在Groovy中编写以下测试(使用Spock): class CallingClassTest extends Specification { def “check that functionTwo calls functionOne”() { def c = Spy(CallingClass) c.functionOne() >> “mocked function return” when: […]

如何在Groovy Jenkins管道中使用全局外部Java库中的方法?

首先,我是Java,Groovy和Jenkins的新手所以请耐心等待我;) 我正在准备一个支持Pipeline的Jenkins服务器,以便将来在我们的构建环境中使用。 我们使用一种特殊的内部脚本语言,我必须在java中编写一个包装器。 没有选择只在Groovy中完成这项工作,我们必须使用这种特殊语言。 我已经尝试了很多方法将java lib引用到这个jenkins项目但是都没有用。 主要是我使用了https://github.com/jenkinsci/workflow-cps-global-lib-plugin上的文档来实现这一点,但也尝试了几种搜索google或stackoverflow的方法。 在文档之后,这应该是可能的。 我已将流程简化为测试设置以进行测试。 假设以下…… 我在Jenkins有一个名为’MultibranchTestProject01’的多分支项目。 jenkins文件: @Library(‘DeltaJenkinsScripts@develop’) def runStageCollect = true if (runStageCollect) { stage(“Collect”) { helloWorld(“Joe”) } } 引用的库通过Jenkins设置中的“全局管道库”全局引用,但也明确说明了这些内容。 它托管在一个git环境中,引用似乎有效。 该库的文件结构: /vars/helloWorld.groovy package de.dcomp.prod def call(name) { def tt = new Test() tt.testText() } /src/de/dcomp/prod/Test.groovy package de.dcomp.prod import de.dcomp.ftel.* def testText() { def sRetVal = “” echo “testText […]

Groovy更新导致PermGen中大量死亡的GroovyClassLoaders

我有一个Java 7项目,每n分钟由n个进程运行脚本。 以下是运行脚本的代码示例。 ScheduledFuture scheduledFuture = scheduledService.scheduleAtFixedRate(new Runnable() { @Override public void run() { try (GroovyClassLoader cl = new GroovyClassLoader()) { // Load up reusable script modules in the class loader Class scriptClass = cl.parseClass(scriptSource); Foo script = optimizationClass.newInstance(); // Tell Groovy that we don’t need class meta info GroovySystem.getMetaClassRegistry().removeMetaClass(scriptClass); script.run(); cl.clearCache(); } catch (IOException […]

使用具有多对多关系的Grails’withCriteria函数重复的问题

我有2个表,问题和答案,具有多对多的关系(即问题可以有多个问题可以重复使用多个答案和答案)。 为了规范化,我在它们之间有一个名为Question_Answer的交叉引用表,它与两个表都有多对一的关系。 这些是他们的类定义: class Question { int id int text static hasMany = [questionAnswers : QuestionAnswer] } class Answer { int id int text static hasMany = [questionAnswers : QuestionAnswer] } class QuestionAnswer { int id Question question Answer answer } 我正在尝试根据某些标准获取答案列表。 这是我的标准查询(使用withCriteria函数): def listing = Answer.withCriteria { cache false order “id”, “asc” eq(“id”, myAnswerID) […]

使用Groovy进行Javagenerics和重载

我使用Groovy,JUnit和EasyMock为我的Java应用程序编写unit testing。 在EasyMock中有几个重载方法capture()已被弃用,注意“由于更难的擦除强制执行,不能在Java 7中编译”。 这些方法将Capture类型的对象作为参数。 除其他外,存在以下方法: static boolean capture(Capture captured) static boolean capture(Capture captured) … static T capture(Capture captured) 在Java中不再允许这样做,但是如果直接从Java调用该代码,则会调用正确的方法。 例如,当您执行此代码时 Capture myClassCapture = new Capture(); mockObject.someMethod(capture(myClassCapture)); 调用正确的方法(列表中的最后一个)。 另一方面,如果从Groovy内部调用相同的代码,则会调用列表中的第一个方法,并在测试中出错。 我认为这与Java和Groovy如何解决这些方法有关。 我的假设是Java在编译时绑定方法,而Groovy试图在运行时找到该方法并采用它可以找到的任何方法(可能是第一个)。 任何人都能解释到底发生了什么吗? 这样可以更精确地理解Java和Groovy之间的不同行为。 我通过将Groovy中的调用委托给Java方法来修复它,它将为我完成这项工作: public class EasyMockUtils { public static T captureObject(Capture captureForObject) { return EasyMock.capture(captureForObject); } } 可能有更好的方法吗?

如何在服务器端调用带有多部分请求的URL,而不是文件,而是包含文件内容的字符串

我的servlet中有一个xml文件内容作为字符串,我需要调用另一个带有多部分post请求的URL,将其作为xml文件上传。 有办法可以做到吗? 到目前为止,这就是我正在做的事情 private def createConfiguration(def sessiontoken) { /*reqParams is request.getParameterMap(), fileParams is again a map*/ def charset = “UTF-8”; def query = String.format(“emailaddress=%s&projectid=%s&cfgname=%s&cfgdesc=%s&cfgfile=%s”, URLEncoder.encode(sessiontoken, charset), URLEncoder.encode(reqParams.c_Cfgname[0], charset), URLEncoder.encode(reqParams.c_Cfgdesc[0], charset), URLEncoder.encode(reqParams.c_Cfgtype[0], charset), URLEncoder.encode(reqParams.CFGFILE[0], charset),) URLConnection connection = new URL(fileParams.login).openConnection() connection.setDoOutput(true) connection.setRequestProperty(“Accept-Charset”, charset) connection.setRequestProperty(“Content-Type”, “multipart/form-data;charset=” + charset) try { connection.getOutputStream().write(query.getBytes(charset)) } finally { connection.getOutputStream().close() } InputStream […]

elasticsearch – 没有为注册的查询]

我试图从我的测试中向ES发送请求。 我将映射和插入的文档应用于同一测试中名为’gccount_test’的ES索引 。 我在一个名为member的文件中维护了一个非常简单的查询,我想测试它。 { “query” : { “match_all” : {} } } 我的测试方法是 public void testMemberQuery(){ final Charset CHARSET = StandardCharsets.UTF_8 //load query byte[] bytes = Files.readAllBytes(Paths.get(MEMBER_QUERY_PATH)) String query = CHARSET.decode(ByteBuffer.wrap(bytes)).toString() println “QUERY => ${query}” SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder() searchSourceBuilder.query(query) SearchRequestBuilder searchRequestBuilder = client.prepareSearch(INDEX_NAME) //ClusterAdminClient adminClient = client.admin().cluster() //searchRequestBuilder.setTypes(Constants.ESTYPE_MEMBER) //println “CLUSTER => ${adminClient}” […]