2

我设计JUnit了测试套件,在代码本身中硬编码了所需的值。每次如果有任何更改,我都需要打开项目并进行修改。为了提供来自外部文件的输入,我使用了易于设计的 Excel 表格。excel文件也有一些下拉菜单项,它告诉我们需要执行的测试用例。excel表也有一些文本框,用户必须在运行测试套件之前填写值。但是excel不是平台独立的。

有没有更好的方法可以被普遍接受且独立于平台来为 JUnit 测试套件提供输入?

4

3 回答 3

1

我相信没有普遍接受的方式来为 JUnit 测试提供输入。Afaik,单元测试通常 - 或根据定义 - 很小(最小的可测试部分)。作为测试的一部分,数据是硬编码的。

也就是说,我还使用单元测试来测试更大的数值算法/模型,有时我必须为此提供更复杂的数据。我也通过电子表格提供这些数据。我相信电子表格是这种表格数据的自然 GUI。

我使用Obba直接从电子表格中触发我的 Java 代码(免责声明:我也是 Obba 的开发人员,但我的主要开源项目是一个数学金融库,为此我使用这些工作表)。

我的建议是走两条路:

  • 作为构建环境的一部分,使用预定义的硬编码数据创建小型(经典)单元测试。
  • 使用通过工作表提供的数据创建更大的测试,以分析要输入的代码行为。

如果可能,不时向您的自动化测试套件添加硬编码的“更大的测试”。

注意:还有参数化单元测试的概念,并且有一些工具可以生成(例如随机化)参数作为测试的一部分。

于 2013-08-09T20:56:47.103 回答
1

测试驱动开发的核心概念之一是您始终以自动化的方式运行所有测试用例。让用户使用 excel 来选择测试用例并输入数据打破了这种模式。

您可以从文件中读取来驱动您的测试用例,但也许您的测试需要重新定义为与数据无关。每次运行 JUnit 时,它们都应该运行。

就在昨天,我使用随机数据进行了测试......这是一个例子:

@Test
public void testIntGetter() {
  int value = random.getNextInt();
  MyObj obj = new MyObj(value);

  assertEquals(value,obj.getMyInt());

}

虽然这是一个过于简单的示例,但它确实在独立于数据的同时测试了类的功能。

一旦您决定打破测试驱动开发/JUnit 模型,那么您的问题就不再适用。将工具用于其他目的很好,但您的具体问题不正确。

最好将数据保存在代码中,除了一些例外情况,测试独立于数据,如我的示例所示。这些异常中的大多数都是应该存在于代码中的边缘情况。例如,采用 String 参数的方法应针对 null、空字符串和非空字符串进行测试。

如果参数的值揭示了代码中的缺陷,则代码应该是固定的,并且该值应该是测试条件集合的永久成员。

于 2013-08-09T11:18:34.527 回答
1

我是否理解正确,这里的主要问题是找到一种方法,使测试人员可以轻松输入测试数据?这不是写一个测试用例,对吧?

嗯,这个问题发生在许多不同的项目中。例如,一种是让用户在数据库表中键入一些基本值。

有很多方法可以解决这个问题。很多人使用 Excel,甚至更多人使用 MS-Access-Forms、Sharepoint,或者,如果他们更熟悉 Web-Tools,他们最终会建立网站。最后,您使用的方式和工具取决于您和测试人员的知识以及您必须构建和维护的接口数量。在我的公司,我们最终得到了一些可配置的网站,这些网站独立于任何第三方软件许可证(这是我们案例的主要要求)。

唯一应该非常小心的工具是 Excel。如果你只需要几个接口,比如说 10-20,Excel 对我来说仍然可以处理。当它得到更多时,Excel 的维护将杀死你,主要是因为 Excel 将每个接口的编程和业务逻辑分开。更改业务逻辑menas以分别更改所有excel。这迟早会杀死你。

于 2013-08-09T12:43:40.680 回答