Java Beispiel Klassen im TestKann ich in groovy Map Coercion verwenden, um eine Klasse mit einem Konstruktor zu verspotten, der Parameter hat?
public class Sample {
public void printPie() {
System.out.println("Pie.");
}
}
public class SampleCont {
String _PIE;
public SampleCont() {
_PIE = "pie";
}
public void printPie() {
System.out.println(_PIE);
}
}
public class SampleContArg {
String _PIE;
public SampleContArg(String pie) {
_PIE = pie;
}
public void printPie() {
System.out.println(_PIE);
}
}
The groovy Testklasse
public class TestPie extends GroovyTestCase{
void test_Sample()
{
def mock = [printPie: {print "NotPie"}] as Sample
mock.printPie()
}
void test_SampleCont()
{
def mock = [printPie: {print "NotPie"}] as SampleCont
mock.printPie()
}
void test_SampleContArg()
{
def mock = [printPie: {print "NotPie"}] as SampleContArg
mock.printPie()
}
}
Die ersten beiden Tests kompilieren und ausführen Ordnung. Letzteres Test läuft nicht aufgrund einer Ausnahme:
java.lang.ArrayIndexOutOfBoundsException: 0
at SampleContArg_groovyProxy.<init>(Script1.groovy:4)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.codehaus.groovy.runtime.MetaClassHelper.doConstructorInvoke(MetaClassHelper.java:595)
at groovy.lang.MetaClassImpl.doConstructorInvoke(MetaClassImpl.java:2359)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1255)
at groovy.lang.MetaClassImpl.invokeConstructor(MetaClassImpl.java:1185)
at org.codehaus.groovy.runtime.InvokerHelper.invokeConstructorOf(InvokerHelper.java:809)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeNewN(ScriptBytecodeAdapter.java:230)
at Script1.run(Script1.groovy:9)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:543)
at groovy.lang.GroovyShell.evaluate(GroovyShell.java:518)
at groovy.util.ProxyGenerator.instantiateAggregate(ProxyGenerator.java:201)
at groovy.util.ProxyGenerator.instantiateAggregateFromBaseClass(ProxyGenerator.java:70)
at groovy.util.ProxyGenerator.instantiateAggregateFromBaseClass(ProxyGenerator.java:66)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.asType(DefaultGroovyMethods.java:3811)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.groovy.runtime.metaclass.ReflectionMetaMethod.invoke(ReflectionMetaMethod.java:51)
at org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod.invoke(NewInstanceMetaMethod.java:54)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:230)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:912)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:756)
at org.codehaus.groovy.runtime.InvokerHelper.invokePojoMethod(InvokerHelper.java:766)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:754)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodN(ScriptBytecodeAdapter.java:170)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.asType(ScriptBytecodeAdapter.java:622)
at com.hp.vse.cp.cli.agentless.ssh.TestPie.test_SampleContArg(TestPie.groovy:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Im Fall der dritten Klasse oben, kann ich immer noch groovy Karte Zwang verwenden, um die Klasse zu verspotten? Wenn ja, was mache ich falsch?
Als eine Erweiterung dieser Frage. Können wir mithilfe von Abschlusszwängen eine Scheinmethode unter Verwendung von Parametern erreichen? – benzen