📄 interceptortest.groovy
字号:
package groovy.langimport org.codehaus.groovy.runtime.InvokerHelperimport org.codehaus.groovy.runtime.StringBufferWriter/*** Test for the Interceptor Interface usage as implemented by the* TracingInterceptor. Makes also use of the ProxyMetaClass and* shows the collaboration.* As a side Effect, the ProxyMetaClass is also partly tested.* @author Dierk Koenig**/class InterceptorTest extends GroovyTestCase{ def Interceptor logInterceptor def StringBuffer log def interceptable // the object to intercept method calls on def proxy void setUp() { logInterceptor = new TracingInterceptor() log = new StringBuffer("\n") logInterceptor.writer = new StringBufferWriter(log) // we intercept calls from Groovy to the java.lang.String object interceptable = 'Interceptable String' proxy = ProxyMetaClass.getInstance(interceptable.class) proxy.setInterceptor(logInterceptor) } void testSimpleInterception() { proxy.use { assertEquals 20, interceptable.size() assertEquals 20, interceptable.length() assertTrue interceptable.startsWith('I',0) } assertEquals("""before java.lang.String.size()after java.lang.String.size()before java.lang.String.length()after java.lang.String.length()before java.lang.String.startsWith(java.lang.String, java.lang.Integer)after java.lang.String.startsWith(java.lang.String, java.lang.Integer)""", log.toString()) } void testNoInterceptionWithNullInterceptor() { proxy.setInterceptor(null) proxy.use { interceptable.size() } } void testConstructorInterception() { proxy.use { new String('some string') } assertEquals("""before java.lang.String.ctor(java.lang.String)after java.lang.String.ctor(java.lang.String)""", log.toString()) } void testStaticMethodInterception() { proxy.use { assertEquals 'true', String.valueOf(true) } assertEquals("""before java.lang.String.valueOf(java.lang.Boolean)after java.lang.String.valueOf(java.lang.Boolean)""", log.toString()) } void testInterceptionOfGroovyClasses(){ def slicer = new groovy.mock.example.CheeseSlicer() def proxy = ProxyMetaClass.getInstance(slicer.class) proxy.setInterceptor(logInterceptor) proxy.use(slicer) { slicer.coffeeBreak('') } assertEquals("""before groovy.mock.example.CheeseSlicer.coffeeBreak(java.lang.String)after groovy.mock.example.CheeseSlicer.coffeeBreak(java.lang.String)""", log.toString()) }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -