如果 class 使用 ArchUnit 扩展 "AnyVal",我该如何断言

How can I assert if a class extends "AnyVal" using ArchUnit

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

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

isAnyVal.check(importedClasses) // Always returns true

上面的代码实际上并没有捕捉到任何东西,并通过了 class 不扩展 AnyVal 的代码。

classOf[AnyVal]java.lang.Object,所以您只是要求所有 类 扩展 Object,他们这样做了。

来自ArchUnit user guide

It does so by analyzing given Java bytecode, importing all classes into a Java code structure.

我希望你能得到 Class 等,并且可以从那里进入 Scala 反射,即使你不会得到很好的 DSL,但他们使用他们自己的 API .

因此,要回答特定于 Scala 的问题,它需要解析 ,这对开发人员来说可能是一项非常大的工作(更不用说维护,或者至少直到直到特定 Scala 版本的依赖斯卡拉 3).