在Groovy中创建Mock JMX服务器和Bean

时间:2016-02-25 13:40:10

标签: unit-testing groovy jmx

我们正在使用广泛的自定义MBean和属性监视自定义应用程序。我们已经在实验室中对服务器进行了长时间的功能测试,但现在我们想要创建不依赖于实际远程连接的正确单元测试。

就我自己而言,我根本无法弄清楚如何使用Groovy JMX构建器来启动本地MBeanServer,并使用属性和操作列表公开本地mbeans。

有人愿意提供这样一个模型的例子吗?我为jmxbuilder找到的现有示例并没有让我在那里,但它看起来应该是可能的。

3 个答案:

答案 0 :(得分:1)

这是我使用的(例如Java,而不是Groovy ......)

    bean.setHtml(sanitizeHTML(bean.getHtml()));

有关其他方法的详细信息,请参阅我的JMXHelper

答案 1 :(得分:1)

Spock测试的一个简单例子

  • 将groovy bean导出为JMX
  • 导入和使用此bean

代码:

class JMXSpec extends Specification {

    class MyBean {
        def property
    }

    def "launch and test a mbean"() {
        given: "a mbean exported"

            def jmx = new JmxBuilder()
            jmx.export {
                // Export every properties/methods of 'MyBean' 
                // under 'Groovy.Test:name=MyBean'
                bean(
                    target:new MyBean(property:"test"),
                    name:"Groovy.Test:name=MyBean"
                )

            }

        and: "a mbean imported from the local server"
            def mbean = new GroovyMBean(ManagementFactory.getPlatformMBeanServer(), 
                "Groovy.Test:name=MyBean")
        expect:
            "test" == mbean.Property
    }
}

答案 2 :(得分:0)

此外,对于后代,这是一个模仿常见的“queryNames”方法的略微修改的例子......

import groovy.jmx.builder.JmxBuilder
import spock.lang.Specification
import javax.management.ObjectName
import java.lang.management.ManagementFactory


class SandboxJmxBuilderSpec extends Specification {
    class MyBean {
        def property
    }

    def "launch and test a mbean"() {
        given: "a mbean exported"

        def jmx = new JmxBuilder()
        jmx.export {
            // Export every properties/methods of 'MyBean'
            // under 'Groovy.Test:name=MyBean'
            bean(
                    target:new MyBean(property:"test"),
                    name:"Groovy.Test:name=MyBean"
            )

        }

        and: "a mbean imported from the local server"
        def mbs = ManagementFactory.getPlatformMBeanServer()
        def queryString = "Groovy.Test:name=MyBean"
        def discovery = mbs.queryNames(new ObjectName(queryString), null)

        expect:
        "test" == new GroovyMBean(mbs, discovery[0]).Property
    }
}