英文:
Is there any way in Database Rider to reduce duplication of @DataSet configuration properties?
问题
在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() {
//...
}
正如您所看到的,cleanAfter和skipCleaningFor是重复的。这只是一个示例。skipCleaningFor列表甚至可能更长。拥有成千上万个具有相同跳过表列表的测试是一场噩梦。想象一下,如果我们需要在成千上万个地方更改此列表。
将此列表提取到某个static final
变量中不是一个选项,因为注释的参数只能是内联常量(否则会出现编译错误)。
元数据集是减少重复的一种方式,但它们包括所有属性,并且无法覆盖某些属性(例如我示例中的value属性)。
合并数据集看起来很有希望,但不太确定...
英文:
Is there any way in Database Rider to reduce duplication of @DataSet configuration properties?
For example, suppose we have:
@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() {
//...
}
Here as you can see cleanAfter and skipCleaningFor are duplicated. And this is just an example. The list of skipCleaningFor can be even longer. Having thousands of tests with the same list of skipped tables is a nightmare. Imagine we need to change this list, in thousands of places.
Extracting this list to some static final
variable is not an option, because parameters to annotation can be only true inline constants (you will get compilation error).
Meta datasets are one of the ways of reducing duplication but they include ALL properties, and it's not possible to override some of the properties (like value in my example)
Merge datasets looks promising, but not sure...
答案1
得分: 2
看起来我找到了如何使用合并数据集来完成这个任务。
首先,我们需要为所有测试创建一些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() {
//...
}
}
就是这样 - 配置不再重复!
英文:
Seems I figured out how to do it using merging datasets.
First, we need some BaseTest for all our tests with the config of skipCleaningFor :
@DataSet(value = "yml/empty.yml", skipCleaningFor = {"zone_code", "product_code", "product_type", "user_type"})
class BaseTest
Where empty.yml it's just some empty dataset to avoid error during tests execution.
Then, in the test class, we put
@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() {
//...
}
And that's it - the config is no longer duplicated!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论