记录 JUnit 测试运行所需的时间

2023-12-23

我想记录我的 JUnit 测试以编程方式运行需要多长时间。我在各种测试类中有大量测试,我想了解每个单独的测试方法运行需要多长时间。

我可以更改继承结构或以不同方式注释方法,但我希望避免在测试方法本身以及用于设置测试业务逻辑的之前/之后方法中添加代码。


您可以使用 JUnit StopWatch 规则并重写 JUnit API 文档中提供的方法,并且只需在每个单独的测试用例类中包含一行代码即可将每个测试的时间打印到控制台或日志文件中。

  1. 创建您的客户秒表类(提供样品)

    import java.util.concurrent.TimeUnit;
    import org.junit.AssumptionViolatedException;
    import org.junit.rules.Stopwatch;
    import org.junit.runner.Description;
    
    public class MyJUnitStopWatch extends Stopwatch{
    
    private static void logInfo(Description description, String status, long nanos) {
        String testName = description.getMethodName();
        System.out.println(String.format("Test %s %s, spent %d microseconds",
                                  testName, status, TimeUnit.NANOSECONDS.toMicros(nanos)));
    }
    
     @Override
       protected void succeeded(long nanos, Description description) {
           logInfo(description, "succeeded", nanos);
       }
    
       @Override
       protected void failed(long nanos, Throwable e, Description description) {
           logInfo(description, "failed", nanos);
       }
    
       @Override
       protected void skipped(long nanos, AssumptionViolatedException e, Description description) {
           logInfo(description, "skipped", nanos);
       }
    
       @Override
       protected void finished(long nanos, Description description) {
           logInfo(description, "finished", nanos);
       }    
    }
    
  2. 使用该行创建一个 ParentTestClass,并且每个测试类都继承父测试类:

    public class ParentTestCase {
    
    
    @Rule
    public MyJUnitStopWatch stopwatch = new MyJUnitStopWatch();
    
    }
    

子类继承父类。子类或方法之前或之后没有其他变化。

public class TestUniqueCharacterString extends ParentTestCase {    

    private String uniqueChars = null;

    @Before
    public void before(){
        uniqueChars = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnop";
    }

    @Test
    public void testMyUniqueCharacterMethod(){


        UniqueCharacteString.doesStringHaveUniqueCharacters(uniqueChars);
    }

Or

  1. 将此行包含在您的每个测试类中

    @Rule
    public MyJUnitStopWatch stopwatch = new MyJUnitStopWatch();
    

    测试类示例:

    import org.junit.After;
    import org.junit.Before;
    import org.junit.Rule;
    import org.junit.Test;
    
    
    
    public class TestUniqueCharacterString {    
    
    @Rule
    public MyJUnitStopWatch stopwatch = new MyJUnitStopWatch();
    
    private String uniqueChars = null;
    
    @Before
    public void before(){
        uniqueChars = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnop";
    }
    
    @Test
    public void testMyUniqueCharacterMethod(){
    
    
        UniqueCharacteString.doesStringHaveUniqueCharacters(uniqueChars);
    }
    
    @Test
    public void testGoodIsUniqueMethod(){
            UniqueCharacteString.isUniqueCharacs(uniqueChars);
    }
    
    @Test
    public void testGoodIsUniqueMethodWithoutArray(){
        UniqueCharacteString.isUniqueCharsWithoutArray(uniqueChars);
    }
    
    @After
    public void after(){
        uniqueChars = "";
    }    
     }
    

JUnit API 参考:

http://junit.org/apidocs/org/junit/rules/Stopwatch.html http://junit.org/apidocs/org/junit/rules/Stopwatch.html

样本输出

Test testMyUniqueCharacterMethod succeeded, spent 3250 microseconds
Test testMyUniqueCharacterMethod finished, spent 3250 microseconds
Test testGoodIsUniqueMethod succeeded, spent 70 microseconds
Test testGoodIsUniqueMethod finished, spent 70 microseconds
Test testGoodIsUniqueMethodWithoutArray succeeded, spent 54 microseconds
Test testGoodIsUniqueMethodWithoutArray finished, spent 54 microseconds

它还将显示失败和跳过的测试用例的时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记录 JUnit 测试运行所需的时间 的相关文章

随机推荐

  • 使用 cabal 和 ghc 构建运行时标志

    我有一个用 Haskell 编写的程序 打算用 GHC 编译 该程序在多核上的扩展性非常好 因此启用多线程非常重要 在我的 cabal我添加的文件ghc options O3 threaded与线程运行时链接 问题是 使用这种方法 用户需要
  • MYSQL:带有 GROUP BY、LEFT JOIN 和 WHERE 子句的 COUNT 不返回零值

    我确信这有一个非常简单的答案 但我似乎找不到它 不知道要搜索什么 标准计数 按查询分组可能如下所示 SELECT COUNT t2 name FROM table 1 t1 LEFT JOIN table 2 t2 ON t1 key id
  • ES6 中按键过滤对象属性

    假设我有一个对象 item1 key sdfd value sdfd item2 key sdfd value sdfd item3 key sdfd value sdfd 我想通过过滤上面的对象来创建另一个对象 所以我有类似的东西 ite
  • 列出域内远程计算机上的硬盘信息

    我正在尝试获取硬盘信息列表 目前我只想列表显示每台计算机包含的硬盘型号 我有以下内容 Get WMIObject win32 diskdrive computer Get Content C Temp DiskDrives Computer
  • java中继承是编译时还是运行时

    有人告诉我继承是运行时的 但我想问如果继承是运行时的 那么当我们尝试通过子类对象访问父类数据成员时 编译器如何在编译时生成错误 class PrivateData private int x 50 void show System out
  • 哪些原因可能会阻止显式和隐式样式的应用?

    我有一个 WPF 测试项目 我用它来回答 SO 问题 不知何故 随着时间的推移 这个项目变得非常混乱 有些东西不再正常工作 这可能不是一个real问题 因为我可以把它扔掉并创建一个新的 但显然这并不是在每种情况下都是一个可行的解决方案 所以
  • 如何从MVC控制器返回Json对象来查看

    我正在做一个 MVC 应用程序 我需要将 json 对象从控制器传递到视图 var dictionary listLocation ToDictionary x gt x label x gt x value return Json new
  • OData v4 WebAPI 响应中的项目计数

    如何返回 OData v4 HTTP 响应中的项目数 我需要这个数字来分页 所以它应该是过滤后 跳过 和 顶部 之前的项目数 我已经尝试在 url 的查询选项中传递 inlinecount allpages 和 count true 参数
  • 找到两个节点(顶点)之间的最短路径

    我有一个互连边的列表 E 如何找到从一个顶点连接到另一个顶点的最短路径 我正在考虑使用 但边缘没有明确定义的根 所以我认为该解决方案不起作用 最短路径由经过的最少顶点数定义 Note There could be a multi path
  • MySQL获取两列之间的所有唯一值

    我有一个包含 ID 的两列的表 我想查询该表以显示两列中每个 ID 的一个列表 TABLE A B 1 2 2 3 5 4 6 2 我希望结果是 TABLE A 1 2 3 5 4 6 使用 UNION 运算符 SELECT A FROM
  • Spring-Batch 复合编写器如何跳过异常

    我正在使用 Spring Batch 我的步骤配置如下 Bean public Step testStep JdbcCursorItemReader
  • Azure 模拟器卡住

    我正在从事 azure WorkerRole 项目VS2015 SDK 2 9 该角色在云中运行良好 但是当我尝试使用 FullEmulator 在本地运行它时 角色无法启动 面料 角色实例 部署29 116 MyComp Engine D
  • PresentModalViewController 使我的应用程序崩溃

    我知道 这是最简单的事情之一 但几天来我一直在努力反对这一点 我过去已经做过很多次了 但由于某种原因 尝试呈现模式视图控制器只会使应用程序崩溃到黑屏 控制台中没有报告任何内容 我希望有人可能遇到过这个问题并提供一些建议 此代码是从 UIVi
  • 如何使用 angular.foreach 比较两个 JavaScript 数组

    我有两个 javascript 对象 var obj1 key1 value1 key2 value2 And var obj2 key1 value1 key2 someOtherValue 正如您所看到的 两个对象之间存在一个差异key
  • 用于在字段级别区分 CSV 文件并将结果输出到 CSV 并保持颜色的工具

    我正在尝试比较 2 个 csv 文件在字段级别的差异 并用颜色编码差异 我尝试了这个命令 git diff color words space x csv y csv 但有两个问题 它将彼此不同的单元格数据放在一起 我不想要这样 我只需要在
  • 创建新工作区

    Modeshape 文档的第 7 1 6 节说 您的应用程序现在可以使用标准 JCR 2 0 API 创建和删除工作区 JCR 2 0 文档说使用 Workspace createWorkspace String name 如何使用本文底部
  • addClass(“test”)给出错误:TypeError:未定义不是函数

    在控制台中我有 myCssClass 0 parentNode li span class myCssClass some text span li 我想为父级添加 css 类span 对于标签 li 我尝试这样 myCssClass 0
  • Android:如何根据设备时区获取默认日期格式

    有没有简单的方法可以根据用户的时区获取默认日期格式 The SimpleDateFormat 给出根据用户区域设置的日期格式 我正在寻找一种场景 需要将提供的日期转换为基于时区的日期格式 例如 用户将其区域设置设置为 中文 并且采用德国时区
  • Java 最小化依赖关系

    我遇到过这样的情况 一小段Java代码有大量依赖的jar 然而 这些 jar 内部的依赖关系非常浅 在大多数情况下 它仅依赖于单个接口的 jar 我不想将所有 jar 与应用程序一起分发 而是只想将特定的类文件分发到它实际使用的 jar 中
  • 记录 JUnit 测试运行所需的时间

    我想记录我的 JUnit 测试以编程方式运行需要多长时间 我在各种测试类中有大量测试 我想了解每个单独的测试方法运行需要多长时间 我可以更改继承结构或以不同方式注释方法 但我希望避免在测试方法本身以及用于设置测试业务逻辑的之前 之后方法中添