我如何断言类是否使用ArchUnit扩展了“ AnyVal”

问题描述 投票:0回答:1

我想编写一个arch unit测试来断言一个类扩展了AnyVal类型。

val rule = classes().should().beAssignableTo(classOf[AnyVal])
val importedClasses = new ClassFileImporter().importPackages("a.b.c")

isAnyVal.check(importedClasses) // Always returns true

上面的代码实际上并没有捕获任何东西,也传递了不扩展AnyVal的类。

scala archunit
1个回答
0
投票

[classOf[AnyVal]java.lang.Object,因此您只是在问所有类都扩展了Object,它们就是这样做的。

来自ArchUnit user guide

通过分析给定的Java字节码,将所有类导入到Java代码结构中,来完成此操作。

我希望您能得到Class等,并且可以从那里进入Scala反射,即使您不会获得漂亮的DSL,但他们会改用自己的API。

因此,要回答Scala特定的问题,就需要解析@ScalaSignature annotations,这对于开发人员来说可能是很大的工作(更不用说维护,或者至少在Scala 3之前依赖于特定的Scala版本)。

© www.soinside.com 2019 - 2024. All rights reserved.