我们正在使用广泛的自定义MBean和属性监视自定义应用程序。我们已经在实验室中对服务器进行了长时间的功能测试,但现在我们想要创建不依赖于实际远程连接的正确单元测试。
就我自己而言,我根本无法弄清楚如何使用Groovy JMX构建器来启动本地MBeanServer,并使用属性和操作列表公开本地mbeans。
有人愿意提供这样一个模型的例子吗?我为jmxbuilder找到的现有示例并没有让我在那里,但它看起来应该是可能的。
答案 0 :(得分:1)
这是我使用的(例如Java,而不是Groovy ......)
bean.setHtml(sanitizeHTML(bean.getHtml()));
有关其他方法的详细信息,请参阅我的JMXHelper。
答案 1 :(得分:1)
Spock测试的一个简单例子
代码:
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
}
}