2

CodeModel 2.6 を使用しています。

getType( ) メソッドが JDefinedClass の 2 レベル上の抽象スーパークラスから継承されている場合、この命令をどのように生成すればよいでしょうか?

    assertEquals(GeneraldocumenMetadata.TYPE, generaldocumenMetadata.getType());

バックグラウンド:

  1. assertEquals(...) メソッドは、「import static org.junit.Assert.assertEquals;」から来ています。
  2. クラス階層は
    • 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[] {}); " は null を返します

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);
}
4

1 に答える 1