### Question:
MethodCollection { public Method get(String name) { var md = get0(name); if (md == null) { return null; } else { md.referenced = true; return md.method; } } MethodCollection(Class<?> klass); boolean needWrapperInterface(); Set<String> methodSignatures(); Method get(String name); Boolean isExitNode(String name); void include(String method); void exclude(String method); Boolean isFluentNode(String name); void exitNode(String name); @Override String toString();  }### Answer:
@Test public void testAmbiguousThrows() { Assertions.assertThrows(GeciException.class, () -> new MethodCollection(TestClass.class).get("m1")); }
@Test public void testNonAmbiguousCanBeCalled() throws InvocationTargetException, IllegalAccessException { Assertions.assertEquals("TEST", new MethodCollection(TestClass.class) .get("m1(String,TestMethodCollection)") .invoke(new TestClass(), "TEST", null)); }
@Test public void testNonAmbiguousCanBeCalledDenormalType() throws InvocationTargetException, IllegalAccessException { Assertions.assertEquals("TEST", new MethodCollection(TestClass.class) .get("m1(java.lang.String,TestMethodCollection)") .invoke(new TestClass(), "TEST", null)); }