我设计了JUnit
Test Suite,其中包含代码本身硬编码的必需值。每次如果有任何变化,我都需要打开项目并进行修改。为了提供外部文件的输入,我使用excel表,可以很容易地设计。 excel文件也有一些下拉菜单项,它告诉需要执行的测试用例。 excel表还有一些文本框,用户必须在运行测试套件之前填写值。
但是excel不是平台独立的。
是否有更好的方式可以被普遍接受并且与平台无关,以便为JUnit Test Suite提供输入?
答案 0 :(得分:1)
关于测试驱动开发的核心概念之一是,您可以自动运行所有测试用例。让用户使用excel来选择测试用例并输入数据会打破这个模型。
您可以从文件中读取以驱动测试用例,但也许您的测试需要重新定义为与数据无关。每次运行JUnit时,所有这些都应该运行。
就在昨天我使用随机数据进行测试......这是一个例子:
@Test
public void testIntGetter() {
int value = random.getNextInt();
MyObj obj = new MyObj(value);
assertEquals(value,obj.getMyInt());
}
虽然这是一个非常简单的例子,但它确实在数据独立的同时测试了类的功能。
一旦您决定打破测试驱动的开发/ JUnit模型,那么您的问题就不适用了。将工具用于其他目的很好,但您的具体问题不正确。
最好让数据驻留在代码中,有些例外测试与我的示例所示的数据无关。大多数例外是边缘情况应该驻留在代码中。例如,一个接受String参数的方法应该针对null进行测试,空字符串和非空字符串。
如果参数的值显示代码中的缺陷,则代码应该是固定的,并且该值应该是测试条件集合的永久成员。
答案 1 :(得分:1)
我是否理解你,这里的主要内容是找到一种让测试人员轻松输入测试数据的方法? 这不是写一个测试用例,对吗?
嗯,这个问题发生在许多不同的项目中。例如,一个是让用户键入数据库表中的一些基本值。
有很多方法可以解决这个问题。很多人使用Excel,甚至更多地使用MS-Access-Forms,Sharepoint,或者,如果他们更熟悉Web-Tools,他们最终会建立网站。 最后,您的方式和使用的工具取决于您和测试人员的知识以及您必须构建和维护的接口数量。在我的公司,我们最终得到了一些可配置的网站,这些网站独立于任何第三方软件许可证(这是我们案例中的主要要求)。
唯一一个应该非常小心的工具是Excel。如果您只需要几个接口,可以说10-20,我仍然可以处理Excel。当它变得更多时,比Excel的维护会杀死你,主要是因为Excel分别为每个接口保留编程和业务逻辑。更改业务逻辑menas以单独更改所有excel。这迟早会杀了你。
答案 2 :(得分:1)
我认为没有通用的方法来为JUnit测试提供输入。 Afaik,单元测试通常 - 或者根据定义 - 小(最小的可测试部分)。数据作为测试的一部分提供硬编码。
也就是说,我还使用单元测试来测试更大的数值算法/模型,有时我必须提供更复杂的数据。我也通过电子表格提供这些数据。我相信电子表格是这种表格数据的自然GUI。
我使用Obba直接从电子表格触发我的Java代码(免责声明:我也是Obba的开发人员,但我的主要开源项目是数学金融库,我使用这些表)。
我的建议是走两条路线:
如果可能,请不时在自动测试套装中添加硬编码的“更大测试”。
注意:还有参数化单元测试的概念,然后有一些工具可以生成(例如随机化)参数作为测试的一部分。