背景
在 [Java] 如何自动生成简单的 PlantUML 类图 一文中,我分享了 ClassDiagramGenerator.java。将它编译之后,可以借助 ClassDiagramGenerator 生成简单的 PlantUML 类图。本文会借助它,生成 JUnit 4 框架中一些重要类的简要类图。
注意事项
本文所提到的类图,全都忽略了泛型信息,以及所有的字段和方法。
正文
org.junit.runners.model.TestClass
假设当前目录下已经有 JUnit 4 的 jar 包(我本地的 jar 包名称为 junit-4.13.2.jar)。那么我们就可以通过如下的命令来生成 org.junit.runners.model.TestClass 的类图。
java -cp .:junit-4.13.2.jar ClassDiagramGenerator 'org.junit.runner.Runner'
运行结果如下 ⬇️
@startuml
interface org.junit.runner.Describable
abstract org.junit.runner.Runner
org.junit.runner.Describable <|.. org.junit.runner.Runner
@enduml
借助 Intellij IDEA (Community Edition) 中 PlantUML 的插件,可以看到这样的效果 ⬇️
org.junit.runner.Runner
org.junit.runners.JUnit4
一个常用的 Runner 是 org.junit.runners.JUnit4。我们先看看它的类图。用如下的命令可以为它生成类图 ⬇️ (请注意:我在使用 java 命令时,指定的 classpath 中包含了 hamcrest 的 jar 包,JUnit 4 会依赖这个 jar 包。但是我没找到 org.junit.runners.JUnit4 这个类具体在哪个地方依赖了 hamcrest 🤔。下文用到 hamcrest jar 包的地方不再重复说明)
java -cp .:junit-4.13.2.jar:hamcrest-core-1.3.jar ClassDiagramGenerator 'org.junit.runners.JUnit4'
运行结果如下 ⬇️
@startuml
interface org.junit.runner.manipulation.Sortable
interface org.junit.runner.manipulation.Orderable
interface org.junit.runner.Describable
interface org.junit.runner.manipulation.Filterable
abstract org.junit.runners.ParentRunner
abstract org.junit.runner.Runner
class org.junit.runners.BlockJUnit4ClassRunner
class org.junit.runners.JUnit4
org.junit.runner.Describable <|.. org.junit.runner.Runner
org.junit.runner.manipulation.Sortable <|-- org.junit.runner.manipulation.Orderable
org.junit.runner.Runner <|-- org.junit.runners.ParentRunner
org.junit.runner.manipulation.Filterable <|.. org.junit.runners.ParentRunner
org.junit.runner.manipulation.Orderable <|.. org.junit.runners.ParentRunner
org.junit.runners.ParentRunner <|-- org.junit.runners.BlockJUnit4ClassRunner
org.junit.runners.BlockJUnit4ClassRunner <|-- org.junit.runners.JUnit4
@enduml
借助 Intellij IDEA (Community Edition) 中 PlantUML 的插件,可以看到这样的效果 ⬇️
org.junit.runners.Suite
另一个常用的 Runner 是 org.junit.runners.Suite。用如下的命令可以为它生成类图 ⬇️
java -cp .:junit-4.13.2.jar:hamcrest-core-1.3.jar ClassDiagramGenerator 'org.junit.runners.Suite'
运行结果如下
@startuml
interface org.junit.runner.Describable
interface org.junit.runner.manipulation.Sortable
interface org.junit.runner.manipulation.Filterable
interface org.junit.runner.manipulation.Orderable
abstract org.junit.runners.ParentRunner
abstract org.junit.runner.Runner
class org.junit.runners.Suite
org.junit.runner.Describable <|.. org.junit.runner.Runner
org.junit.runner.manipulation.Sortable <|-- org.junit.runner.manipulation.Orderable
org.junit.runner.Runner <|-- org.junit.runners.ParentRunner
org.junit.runner.manipulation.Filterable <|.. org.junit.runners.ParentRunner
org.junit.runner.manipulation.Orderable <|.. org.junit.runners.ParentRunner
org.junit.runners.ParentRunner <|-- org.junit.runners.Suite
@enduml
借助 Intellij IDEA (Community Edition) 中 PlantUML 的插件,可以看到这样的效果 ⬇️
org.junit.runners.model.RunnerBuilder
下面列举了几个(我认为的)常见的 RunnerBuilder
org.junit.internal.builders.IgnoredBuilderorg.junit.internal.builders.JUnit4Builderorg.junit.internal.builders.AnnotatedBuilderorg.junit.internal.builders.AllDefaultPossibilitiesBuilder
用如下的命令可以为它们生成类图 ⬇️
java -cp .:junit-4.13.2.jar ClassDiagramGenerator 'org.junit.internal.builders.IgnoredBuilder' 'org.junit.internal.builders.JUnit4Builder' 'org.junit.internal.builders.AnnotatedBuilder' 'org.junit.internal.builders.AllDefaultPossibilitiesBuilder'
运行结果如下
@startuml
abstract org.junit.runners.model.RunnerBuilder
class org.junit.internal.builders.IgnoredBuilder
class org.junit.internal.builders.JUnit4Builder
class org.junit.internal.builders.AnnotatedBuilder
class org.junit.internal.builders.AllDefaultPossibilitiesBuilder
org.junit.runners.model.RunnerBuilder <|-- org.junit.internal.builders.IgnoredBuilder
org.junit.runners.model.RunnerBuilder <|-- org.junit.internal.builders.JUnit4Builder
org.junit.runners.model.RunnerBuilder <|-- org.junit.internal.builders.AnnotatedBuilder
org.junit.runners.model.RunnerBuilder <|-- org.junit.internal.builders.AllDefaultPossibilitiesBuilder
@enduml
借助 Intellij IDEA (Community Edition) 中 PlantUML 的插件,可以看到这样的效果 ⬇️
org.junit.runners.model.Statement
下面列举了几个(我认为的)常见的 Statement
org.junit.internal.runners.statements.InvokeMethodorg.junit.internal.runners.statements.RunBeforesorg.junit.internal.runners.statements.RunAfters
用如下的命令可以为它们生成类图 ⬇️
java -cp .:junit-4.13.2.jar ClassDiagramGenerator 'org.junit.internal.runners.statements.InvokeMethod' 'org.junit.internal.runners.statements.RunBefores' 'org.junit.internal.runners.statements.RunAfters'
运行结果如下
@startuml
abstract org.junit.runners.model.Statement
class org.junit.internal.runners.statements.InvokeMethod
class org.junit.internal.runners.statements.RunBefores
class org.junit.internal.runners.statements.RunAfters
org.junit.runners.model.Statement <|-- org.junit.internal.runners.statements.InvokeMethod
org.junit.runners.model.Statement <|-- org.junit.internal.runners.statements.RunBefores
org.junit.runners.model.Statement <|-- org.junit.internal.runners.statements.RunAfters
@enduml
借助 Intellij IDEA (Community Edition) 中 PlantUML 的插件,可以看到这样的效果 ⬇️