如何创建一个可以通过测试套件使用的数据提供程序?

时间:2015-02-11 21:24:59

标签: java spring unit-testing testng

我有一个应用程序,其中一个项目可能需要20分钟才能运行。这是因为我必须模仿创建大量依赖于其他对象的对象,而这些对象又依赖于不同的对象集。例如,我想测试一个Messaging类。但是,消息可能依赖于用户或其权限。因此,我想重新创建一个场景,其中我将10000个消息分配给具有不同数量的权限的500个用户,这意味着他们可能会或可能无法看到它。

我有许多ControllerTests通过每次启动ControllerTest时创建数千个对象来测试此类事物。因为它每次花费大量时间手动完成并连接到数据库。

通过应用程序或特定包或项目,是否有某种方法可以执行此操作?我想测试一个包含100个Controller测试用例的软件包,但我想创建一次这些对象并根据需要提供给它们。

我正在使用TestNg和Spring。

2 个答案:

答案 0 :(得分:0)

TestNG的@Dataprovider支持任何对象:http://testng.org/doc/documentation-main.html#parameters-dataproviders

但是如果你必须多次创建非常大的图形,那么创建它一次并使它变得不可变会更容易。

答案 1 :(得分:0)

在应用程序中执行一次,您可以尝试实现ISuiteListener onStart方法。这将确保您的设置发生一次。您可以输入一些并行运行的代码来加速该过程。

如果要对包进行特定设置。您可以查看ITestListener onStart方法。运行时,将包添加到<test>

或者,根据您的问题陈述,我不确定您是否正在寻找数据提供者,因为您希望您的设置只运行一次。在下面的解决方案中,每次测试都会运行一次。

但是如果你想在类之间共享数据提供者,那么你可以把它放在一个类中。它必须是一个静态方法,您可以在dataProviderClass属性中指定可以找到它的类:( testng doc下面的示例)

public class MyTest {
  @Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
  public void test(Integer n) {
    // ...
  }
}