【问题标题】:How do I test a concurrent Java program which expects cmd line arguments?如何测试接受命令行参数的并发 Java 程序?
【发布时间】:2011-05-13 18:43:14
【问题描述】:

我有一个 Java 程序,它的主要方法(在​​主类中)需要命令行参数。该程序也是并发的(使用线程和东西)。

我想对程序进行大规模重构。在开始重构之前,我想为 main 方法创建一个测试套件。我想用不同的命令行参数测试 main 方法。我希望在我进行的每个重构步骤之后自动运行这些测试。如何创建通过 cmd 行参数的测试?

我不能使用 JUnit,因为据我所知它不适用于并发程序。我也不确定您是否可以使用 JUnit 传递命令行参数。

我正在使用eclipse。

【问题讨论】:

    标签: java eclipse testing concurrency command-line-arguments


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      考虑使用 JMeter。使用JUnit sampler,您可以轻松地进行并发 JUnit 测试,并查看结果。详情请见this question

      【讨论】:

        【解决方案3】:

        我不熟悉专门用于多线程的各种自动化工具,所以我不会对它们发表评论。但简单而有效的选择是将正在运行的程序中的关键事件记录到 CSV 文件中。您可以记录最终结果(如果它是计算类型程序)或在程序中某些关键状态发生更改或事件发生的每个实例处注销。因为它是一个多线程应用程序,所以您必须注意比较记录数据的顺序,如果您不能保证您希望看到的键事件的相对顺序,那么使用键值类型结果比较输出。无论哪种方式,我们的想法都是创建测试数据文件,以便在回测时用于自动比较。

        【讨论】:

          【解决方案4】:

          Awaitility 也可以帮助您编写确定性单元测试。它允许您等到系统中某处的某个状态被更新。例如:

          await().untilCall( to(myService).myMethod(), greaterThan(3) );
          

          await().atMost(5,SECONDS).until(fieldIn(myObject).ofType(int.class), equalTo(1));
          

          它还支持 Scala 和 Groovy。

          await until { something() > 4 } // Scala example
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-09-26
            • 1970-01-01
            • 1970-01-01
            • 2014-06-01
            • 2019-11-23
            • 2022-11-25
            • 1970-01-01
            • 2016-04-02
            相关资源
            最近更新 更多