You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ArchUnit断言对象实例提供的公开API方法?

能否用ArchUnit断言对象实例的公开API方法?

ArchUnit核心是做静态代码结构分析,它的断言逻辑基于类的字节码/源代码,而非运行时的对象实例。所以你直接针对Api实例做方法存在性断言的写法,ArchUnit本身不支持。

不过换个思路:对象实例的公开方法本质就是其对应类的公开方法,如果你要验证的是Api类(而非某个特定实例)是否拥有指定的公开方法,ArchUnit完全可以做到,示例代码如下:

// 用ArchUnit断言Api类的公开方法
ArchRule rule = classes()
    .that().areAssignableTo(Api.class)
    .should().havePublicMethodNamed("foo")
    .andShould().notHavePublicMethodNamed("bar");

rule.check(Api.class);

如果你的需求确实是针对运行时实例(比如考虑动态代理、字节码增强后的实例方法),那ArchUnit就不适用了,此时可以直接用Java反射API来实现:

Api api = Api.create();
Class<?> apiClass = api.getClass();

// 断言存在公开方法foo
assertNotNull(apiClass.getMethod("foo"));
// 断言不存在公开方法bar
assertThrows(NoSuchMethodException.class, () -> apiClass.getMethod("bar"));

内容的提问来源于stack exchange,提问作者armandino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:37:34