栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何编写Java注释处理器的自动化单元测试?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何编写Java注释处理器的自动化单元测试?

您正确地模拟了注释处理API(使用像easymock这样的模拟库)是很痛苦的。我尝试了这种方法,但很快就崩溃了。您必须设置许多方法调用期望。测试变得不可维护。

一个 基于状态的测试方法
为我工作得非常好。我必须实现测试所需的javax.lang.model。*
API的各个部分。(只有不到350行代码。)

这是初始化javax.lang.model对象的测试的一部分。设置完成后,模型应与Java编译器实现处于相同状态。

DeclaredType typeArgument = declaredType(classElement("returnTypeName"));DeclaredType validReturnType = declaredType(interfaceElement(GENERATOR_TYPE_NAME), typeArgument);TypeParameterElement typeParameter = typeParameterElement();ExecutableElement methodExecutableElement = Model.methodExecutableElement(name, validReturnType, typeParameter);

静态工厂方法在

Model
实现javax.lang.model。*类的类中定义。例如
declaredType
。(所有不受支持的操作都将引发异常。)

public static DeclaredType declaredType(final Element element, final TypeMirror... argumentTypes) {    return new DeclaredType(){        @Override public Element asElement() { return element;        }        @Override public List<? extends TypeMirror> getTypeArguments() { return Arrays.asList(argumentTypes);        }        @Override public String toString() { return format("DeclareTypeModel[element=%s, argumentTypes=%s]",         element, Arrays.toString(argumentTypes));        }        @Override public <R, P> R accept(TypeVisitor<R, P> v, P p) { return v.visitDeclared(this, p);        }        @Override public boolean equals(Object obj) { throw new UnsupportedOperationException(); }        @Override public int hashCode() { throw new UnsupportedOperationException(); }        @Override public TypeKind getKind() { throw new UnsupportedOperationException(); }        @Override public TypeMirror getEnclosingType() { throw new UnsupportedOperationException(); }    };}

测试的其余部分将验证被测类的行为。

Method actual = new Method(environment(), methodExecutableElement);Method expected = new Method(..);assertEquals(expected, actual);

您可以查看Quickcheck
@Samples和@Iterables源代码生成器测试的源代码。(代码仍然不是最佳的。Method类具有许多参数,而Parameter类并未在其自己的测试中进行测试,而是作为Method测试的一部分进行测试的。尽管如此,它仍应说明该方法。)

VielGlück!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431415.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号