浅解 JUnit 4 第二十篇:自动生成简单的 PlantUML 类图

0 阅读2分钟

背景

[Java] 如何自动生成简单的 PlantUML 类图 一文中,我分享了 ClassDiagramGenerator.java。将它编译之后,可以借助 ClassDiagramGenerator 生成简单的 PlantUML 类图。本文会借助它,生成 JUnit 4 框架中一些重要类的简要类图。

注意事项

本文所提到的类图,全都忽略了泛型信息,以及所有的字段和方法。

正文

org.junit.runners.model.TestClass

假设当前目录下已经有 JUnit 4jar 包(我本地的 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 的插件,可以看到这样的效果 ⬇️

image.png

org.junit.runner.Runner

org.junit.runners.JUnit4

一个常用的 Runnerorg.junit.runners.JUnit4。我们先看看它的类图。用如下的命令可以为它生成类图 ⬇️ (请注意:我在使用 java 命令时,指定的 classpath 中包含了 hamcrestjar 包,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 的插件,可以看到这样的效果 ⬇️

image.png

org.junit.runners.Suite

另一个常用的 Runnerorg.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 的插件,可以看到这样的效果 ⬇️

image.png

org.junit.runners.model.RunnerBuilder

下面列举了几个(我认为的)常见的 RunnerBuilder

  • org.junit.internal.builders.IgnoredBuilder
  • org.junit.internal.builders.JUnit4Builder
  • org.junit.internal.builders.AnnotatedBuilder
  • org.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 的插件,可以看到这样的效果 ⬇️

image.png

org.junit.runners.model.Statement

下面列举了几个(我认为的)常见的 Statement

  • org.junit.internal.runners.statements.InvokeMethod
  • org.junit.internal.runners.statements.RunBefores
  • org.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 的插件,可以看到这样的效果 ⬇️

image.png

参考资料