【问题标题】:Is there any way in Database Rider to reduce duplication of @DataSet configuration properties?Database Rider 中是否有任何方法可以减少 @DataSet 配置属性的重复?
【发布时间】:2020-09-24 17:28:05
【问题描述】:

Database Rider 有什么方法可以减少 @DataSet 配置属性的重复?

例如,假设我们有:

@DataSet(value = "yml/test1.yml", cleanAfter = true, skipCleaningFor = {"zone_code", "product_code", "product_type", "user_type"})
public void test1() {
  //...
}

@DataSet(value = "yml/test2.yml", cleanAfter = true, skipCleaningFor = {"zone_code", "product_code", "product_type", "user_type"})
public void test2() {
  //...
}

如您所见,cleanAfterskipCleaningFor 是重复的。这只是一个例子。 skipCleaningFor 的列表可以更长。使用相同的跳过表列表进行数千个测试是一场噩梦。想象一下,我们需要在数千个地方更改此列表。

将此列表提取到某个static final 变量不是一种选择,因为注释的参数只能是真正的内联常量(您会得到编译错误)。

Meta datasets 是减少重复的方法之一,但它们包含所有属性,并且无法覆盖某些属性(例如我的示例中的 value

Merge datasets 看起来很有希望,但不确定...

【问题讨论】:

    标签: java unit-testing junit dbunit


    【解决方案1】:

    似乎我想出了如何使用合并数据集来做到这一点。 首先,我们的所有测试都需要一些 BaseTest,配置为 skipCleaningFor :

    @DataSet(value = "yml/empty.yml", skipCleaningFor = {"zone_code", "product_code", "product_type", "user_type"})
    class BaseTest
    

    其中 empty.yml 只是一些空数据集,以避免在测试执行期间出错。 然后,在测试类中,我们把

    @DbUnit(mergeDataSets = true)
    @DBRider
    class MyTest extends BaseTest {
       @DataSet(value = "yml/test1.yml", cleanAfter = true)
       public void test1() {
         //...
       }
    
       @DataSet(value = "yml/test2.yml", cleanAfter = true)
       public void test2() {
         //...
       }
    

    就是这样 - 配置不再重复!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2017-07-04
      • 2020-08-17
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多