什么是为JUnittesting套件提供input的普遍接受的方式

我已经devise了JUnittesting套件,在代码本身中硬编码了所需的值。 每次如果有任何变化,我需要打开项目,并进行修改。 为了提供来自外部文件的input,我使用了可以很容易devise的Excel表格。 excel文件也有一些下拉菜单项,它告诉testing用例需要执行。 Excel工作表也有一些文本框,用户在运行testing套件之前必须填写值。 但是,Excel不是平台独立的。

有没有更好的方法被普遍接受,并且独立于平台以向JUnit Test Suite提供input?

我是否理解你的观点,这里最重要的是find一种方法使testing人员能够轻松地inputtesting数据? 编写testing用例并不多,对吧?

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

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

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

关于testing驱动开发的核心概念之一就是你自动运行所有的testing用例。 让用户使用excel来selecttesting用例并input数据将打破这个模型。

你可以从一个文件读取驱动你的testing用例,但也许你的testing需要被重新定义为独立的数据。 每次运行JUnit时,它们都应该运行。

就在昨天我用随机数据来执行testing…这里是一个例子:

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

虽然这是一个非常简单的例子,但它在数据独立的同时testing了类的function。

一旦你决定打破testing驱动开发/ JUnit模型,那么你的问题是不是真的适用。 这可以用于其他目的的工具,但您的具体问题是不正确的。

数据驻留在代码中是最好的,但有一些例外情况,testing是独立于数据的,如我的示例所示。 这些例外中的大部分都是应该驻留在代码中的边缘情况。 例如一个接受String参数的方法,应该针对null,空string和一个非空string进行testing。

如果参数的值在代码中显示出缺陷,那么代码应该是固定的,并且该值应该是testing条件集合的永久成员。

我相信没有普遍接受的方式为JUnittesting提供input。 Afaik,unit testing通常是或者根据定义是小的(最小的可testing部分)。 数据是作为testing的一部分硬编码提供的。

也就是说,我也使用unit testing来进行更大数值algorithm/模型的testing,为此我有时需要提供更复杂的数据。 我也通过电子表格提供这些数据。 我相信电子表格是这种表格数据的自然GUI。

我使用Obba直接从电子表格中触发我的Java代码(免责声明:我也是Obba的开发者,但是我的主要开源项目是一个math金融图书馆,我使用这些图表)。

我的build议是走两条路线:

  • 使用预定义的硬编码数据创build小型(经典)unit testing,作为构build环境的一部分。
  • 使用通过表单提供的数据创build更大的testing,以分析要input的代码行为。

如果可能的话,不时加一个硬编码的“更大的testing”到你的自动testing服。

注意:还有参数化unit testing的概念,还有一些工具可以生成(例如随机)参数作为testing的一部分。