使用jUnit 4,我可以参数化@BeforeClass吗?

Dan*_*nes 16 junit integration-testing parameterized junit4

我正在使用jUnit来管理访问数据库的应用程序的集成测试.因为设置测试数据是一项耗时的操作,所以我在@BeforeClass方法中一直这样做,每个测试类只执行一次(与@Before每个测试方法运行一次的方法相反).

现在我想尝试一些不同的排列来配置数据层,在每个不同的配置上运行我的所有测试.这似乎是Parameterized测试跑步者的自然使用.问题是,Parameterized为类构造函数提供参数,该@BeforeClass方法是抽象的,并在类构造函数之前调用.

几个问题,

是否Parameterized调用@BeforeClass的参数的每个排列方法,还是只调用一次?

如果@BeforeClass重复调用该方法,是否有某种方法可以从内部访问参数值?

如果不是这些,人们认为什么是解决这个问题的最佳替代方法?

Jea*_*sky 1

@BeforeClass 在您的示例中仅被调用一次。考虑到这个名字,这是有道理的——课前!

如果您的测试需要不同的数据,我可以想到两种选择:

  1. 在 @Before 中设置该数据,使其特定于测试
  2. 将要使用相同数据运行的测试分组到单独的测试类中,并对每个测试类使用 @BeforeClass。

  • 感谢您澄清我对 @BeforeClass 的理解。不幸的是,您概述的两种方法并不能解决我更大的问题。方法 1 的问题是,我需要进行高成本的一次性初始化,该初始化会从一个场景更改为下一个场景,但我不想为每个测试都重复该初始化。方法 2 的问题是,即使我运行相同的测试,我也必须为每个场景编写不同的测试类。 (2认同)