使用 sed 根据特定条件更改文件的所有 Java 测试方法名称

使用 sed 根据特定条件更改文件的所有 Java 测试方法名称

对于我正在从事的项目,我尝试创建一个脚本来遍历名为 *Test*.java (例如 AccountServiceTest.java) 的所有文件。每个文件都包含 Java 测试方法。多年来,每个团队成员对命名约定的解释都不同,最终我们得到了一堆混乱的测试方法名称。作为一项重构任务,我试图正确重命名所有这些方法名称。手动操作会花费太长时间,因此我尝试使用 Bash 脚本来完成。该脚本应根据团队中讨论的规则更改方法的名称。

例如 :

...
public void givensomethingWhensomethingElseThensomethingElse() {
...

最终应该是这样的:

...
public void given_something_when_somethingElse_then_somethingElse() {
...

我现在认为应该采取以下步骤:

  1. 选择包含“public void”的行

  2. 捕获给定并确保它是小写的(GIVEN_something 导致给定的_something)

  3. 捕捉时间并确保它是小写的

  4. catch then 并确保它是小写的

  5. catch 给定和何时之间的字符串(或者有时方法名称中没有when语句)

     - String found for example is _SomeRandomText
     - remove all _ --> SomeRandomText
     - change first character to lowercase --> someRandomText
     - add _ in front and in back --> _someRandomText_ 
     - result is : ...given_someRandomText_when...
    
  6. 捕获when和then之间的字符串

     - String found for example is _SomeRandomText   
     - remove all _ --> SomeRandomText
     - change first character to lowercase --> someRandomText
     - add _ in front and in back --> _someRandomText_
     - result is : ...when_someRandomText_then... 
    
  7. 捕获 then 和括号之间的字符串

     - String found for example is _SomeRandomText 
     - remove all _ --> SomeRandomText
     - change first character to lowercase --> someRandomText
     - add _ in front --> _someRandomText
     - result is : ...then_someRandomText(... 
    

我认为 sed 将是这里的解决方案,但我只是不知道如何创建它。有人有想法吗?

答案1

像这样:

$ sed -E '/public void.*given.*when.*then/s/_(\w)/\U\1/g' file
public void givenSomethingWhenSomethingElseThenSomethingElse() {

我不尊重5、6、7分,但现在你已经有足够的机会自己去适应它了。

_[a-z]我在这里所做的是用大写的匹配字符替换。

如果您需要更换到位,添加-i开关

相关内容