2
我正在使用CodeModel 2.6。如何使用CodeModel從二級抽象超類調用一個方法?
當getType()方法從抽象超類繼承,JDefinedClass上方的兩個級別繼承時,如何生成此指令?
assertEquals(GeneraldocumenMetadata.TYPE, generaldocumenMetadata.getType());
背景:
- 中的assertEquals(...)方法來源於 「進口靜態org.junit.Assert.assertEquals;」
- 的類層次結構是
- GeneraldocumenMetadata延伸ItemMetadata
- ItemMetadata延伸AbstractItemMetadata
- AbstractItemMetadata擁有對GetType()方法,和私營類型字段
最終結果/所需方法如下:
@Test
public void testParameterizedConstructorSuccess()
{
String modifiedType = GeneraldocumenMetadata.TYPE + "andMore";
generaldocumenMetadata = new GeneraldocumenMetadata(modifiedType);
assertEquals(modifiedType, generaldocumenMetadata.getType());
}
CodeModel方法現在看起來像這樣,但是「definedClass.getMethod(」getType「,new JType [] {}); 「在返回空
private void testDefaultConstructorMethod(JFieldVar uutField, JVar staticTYPEVar, final JDefinedClass unitTestClass, JDefinedClass definedClass, JCodeModel codeModel)
{
int modifiers = JMod.PUBLIC;
JMethod unitTestMethod = unitTestClass.method(modifiers, Void.TYPE, "testDefaultConstructor");
unitTestMethod.annotate(org.junit.Test.class);
JBlock unitTestBody = unitTestMethod.body();
unitTestBody.assign(uutField, JExpr._new(unitTestClass));
JClass abstractItemMetadataClass = definedClass._extends();
JMethod getTypeMethod = definedClass.getMethod("getType", new JType[] {});
JExpr.invoke(getTypeMethod);
JInvocation assertEqualsInvoke = codeModel.directClass("org.junit.Assert").staticInvoke("assertEquals").arg(staticTYPEVar).arg(JExpr.invoke(getTypeMethod));
unitTestBody.add(assertEqualsInvoke);
}