java - 什么可以使此 dsl 更易于键入或阅读?

标签 java database testing scala dbunit

我编写了一个工作语法来替换 scala 中的 dbunit,称为 ScalaDBTest。整个程序有效——只用了 2 天的时间编写。我有很多抛光工作要做。

无论如何,我用于 DSL 将数据输入数据库的语法是可延展的,我希望得到一些反馈。

基本语法如下所示。这很简单:

country:
- country_id: 1, name: "Canada"
- country_id: 2, name: "United States"

这肯定比 XML 或 SQL 插入语句更好。

我争论过使用“:”还是“=”。前者看起来更好,但后者对我来说似乎是自动输入。

还有一个概念,您可以在其中“标记”记录。从某种意义上说,上述语法是匿名记录。标签将是一个有趣的功能,因为您可以通过多种方式使用它们。

country:
    record: Canada -> country_id: 1, name: $label # produces "Canada"
    record: UnitedStates -> country_id: 2, name: $label.uncamel # produces "United States"

我不喜欢这种语法。有点二话不说。使用“-”看起来不对,但如果我使用像“record”这样的实际命令词,我需要用“->”将它们分开,否则看起来真的很糟糕(出于技术原因,这不是必需的)。

$label 将简单地重复标签,因此您可以使用标签作为重用字符串的最低限度。 $label.uncamel 会在看起来像驼峰式的地方添加空格。

标签背后的想法是为 API 提供一种无需记住 ID 即可访问记录的方法。如果您知道要获取的国家/地区对象是“加拿大”,那么您只需传递标签“加拿大”,它会将其转换为唯一 ID 并将其从数据库中拉出。

这是一个您可以指定默认参数的示例:

province:
? country_id: 1, nice_weather: true
- province_id: 1, name: "British Columbia"
- province_id: 2, name: "Manitoba", nice_weather: false
- province_id: 3, name: "New York", country_id: 2

这是您看到的一些真正的力量。所有这 3 个“省”记录都有 4 列。由于其中 2 个省份来自加拿大,因此它们会自动继承默认值。在第三种情况下,我们将其覆盖为纽约的美国。我们可以根据需要混合/匹配。

在实践中,这将节省大量的打字和认知负担,因为我们在实践中通常只关心几个值,其余的可以仅仅是占位符,让数据库关闭缺少必填字段等在。这也确实有助于测试多态对象。

还有一个:

article:
? date_create: $now
- article_id: 1, title: "The Fed Sucks"
- article_id: 2, title: null

此代码段表明您实际上可以放置空值,而无需像在 dbUnit 中那样使用任何技巧。在 DbUnit 中,您必须首先创建一个转换器,将自定义字符串(如“[NULL]”)转换为实际的空值。

事实上,我们可以提供更多的表达方式,并提供各种表达式和函数来帮助生成数据。例如,$now 返回今天日期/时间的格式正确的 sql 日期。我将扩展这些类型的功能,以帮助更轻松地编写测试数据。

无论如何,我正在寻求帮助以真正清理语法。我可以做出任何改变,因为这是新鲜的,我想从一开始就让它非常时髦,而不是以后再改变。

谢谢

最佳答案

我将建议通过以下方式扩展标签的初始语法:

  1. 按列名称划分/分组标签。
    国家:[标签:名称]
    - country_id: 1, name: "加拿大"
    - country_id: 2, name: "United States"
  2. 按列索引分段/分组标签,以尽量减少输入。
    国家:[标签:2]
    - country_id: 1, name: "加拿大"
    - country_id: 2, name: "United States"
  3. 单一记录
    国家:
    -[label:2] country_id: 1, name: "加拿大"
    -[label:name] country_id: 2, name: "United States"

如果您不想跟踪记录中的列数,可以消除基于索引的标签。

如果您希望扩展该工具,您可以添加其他属性,例如记录组的并发性,例如使用 5 个线程创建 5K 行将是这样的:


国家:[标签:名称] [并发:5]
-[label:2] country_id: 1, name: "加拿大"
-[label:name] country_id: 2, name: "美国"

关于java - 什么可以使此 dsl 更易于键入或阅读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3974103/

相关文章:

java - 将 Java 代码用于 Android 应用程序(用于 AES 加密)

java - Spring boot API - 如何随着用户的增长扩展应用程序

java - 如何通过关键变量 thymeleaf 从模型获取模型图

java - com.google.firebase.database.DatabaseException : Can't convert object of type java. lang.String 输入 com.studentcornerapp.studentcorner.Posts.Posts

node.js - 如何使用 Node、Mocha 获取代码覆盖率信息

azure - 有谁知道我们是否可以使用 TestCafe CICD 管道将屏幕截图上传到 Azure DevOps?

java - 将 String 添加到 DefaultListModel 时未检查或不安全的操作

HBase 扫描 - RowKey 过滤器

mysql - 数据库错误无效值

Docker-compose 退出代码应该为非零时似乎为零