【问题标题】:JavaDocs: How to Create a Custom MarkupJavaDocs:如何创建自定义标记
【发布时间】:2018-12-30 05:51:06
【问题描述】:

我正在创建一套用 Kotlin 编写的插桩测试,这些测试将适用于众多 Web API。我计划将这些测试实施到我们的 CI/CD 流程中。话虽如此,我想为每个测试添加详细的文档,以实现可维护性、验证场景覆盖率等。

目前,我使用 JavaDocs 作为文档;但是,只有少数标记,其中大部分与测试文档无关(@return、@see、@author、@param、@exception、@sample、@simple、@since、@suppress 和 @throws )。因此,我想知道是否有办法创建自定义标记并将它们实施到我的文档中?例如,@scenario 或 @expected?

【问题讨论】:

  • 它们不是注释。它只是 JavaDoc 的标记,两者都恰好以 @ 为前缀。你可以使用任何你想要的自定义标记,但任何 JavaDoc 处理器都可能会忽略它
  • 我还认为一个好的测试应该是自我记录的。我个人认为你计划做的事情没有多大价值。
  • Michael,感谢您对标记的澄清。目前,我在文档中使用 @scenario,它被 JavaDoc 处理器忽略。

标签: java android kotlin integration-testing javadoc


【解决方案1】:

您需要使用自定义 doclet。见'Creating and handling custom tags'

例如,假设您想使用自定义标签,例如 @mytag,在 除了标准标签之外,您的文档 cmets @param@return。使用您自定义中的信息 标签,您需要让您的 doclet 使用代表的 Tag 实例 您的自定义标签。最简单的方法之一是使用 Doc 或 Doc 的子类之一的 tags(String) 方法。这种方法 返回一个 Tag 对象数组,表示其名称的任何标签 匹配字符串参数。例如,如果方法是一个实例 MethodDoc,然后

method.tags("mytag")

将返回一个标签数组 表示方法文档中任何 @mytag 标记的对象 评论。然后,您可以访问 @mytag 标签中的信息 标签的文本方法。该方法返回一个字符串,表示 您可以根据需要解析或使用的标签内容。例如, 如果文档注释包含您的自定义标签之一,例如 这个:

@mytag Some dummy text.

那么文本方法将返回 字符串“一些虚拟文本。”。这是一个独立的 doclet(不是子类 的标准 doclet) 使用这些想法来打印出文本 与它在其中找到的指定标签的所有实例相关联 方法cmets。它可以扩展到查找所有实例 标记所有 cmets。

import com.sun.javadoc.*;

public class ListTags {
    public static boolean start(RootDoc root){ 
        String tagName = "mytag";
        writeContents(root.classes(), tagName);
        return true;
    }

    private static void writeContents(ClassDoc[] classes, String tagName) {
        for (int i=0; i < classes.length; i++) {
            boolean classNamePrinted = false;
            MethodDoc[] methods = classes[i].methods();
            for (int j=0; j < methods.length; j++) {
                Tag[] tags = methods[j].tags(tagName);
                if (tags.length > 0) {
                    if (!classNamePrinted) {
                        System.out.println("\n" + classes[i].name() + "\n");
                        classNamePrinted = true;
                    }
                    System.out.println(methods[j].name());
                    for (int k=0; k < tags.length; k++) {
                        System.out.println("   " + tags[k].name() + ": " 
                        + tags[k].text());
                    }
                } 
            }
        }
    }
}

此 doclet 搜索的标签由变量 tagName 指定。 tagName 字符串的值可以是任何标签名称, 定制或标准。此 doclet 写入标准输出,但其输出 可以修改格式,例如,将 HTML 输出写入文件。

【讨论】:

  • Michael,感谢您抽出宝贵的时间提供一些宝贵的见解。
猜你喜欢
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
相关资源
最近更新 更多