修改fitnesse源碼->自定義頁面腳本中各種Table(ScriptTable,DecisionTable)的類實例變量

修改fitnesse源碼,使得頁面的table中實例化的類分配到自定義的變量中

只需要修改源碼工程中的2個類方法

1. 需要修改fitnesse.testsystems.slim.tables.Disgracer類中的disgraceName()方法

private String disgraceName() {
  disgracedName = new StringBuffer();

  /**
   * add by yefengsong
   * 使分隔符能正常使用
   */
  if(name.contains("->")){
    return name;
  }

  for (char c : name.toCharArray()) {
    appendCharInProperCase(c);
  }

  return disgracedName.toString();
}



2. 需要修改fitnesse.slim.SlimExecutionContext類中的create()

public void create(String instanceName, String className, Object[] args)
  throws SlimError, IllegalArgumentException, IllegalAccessException, InvocationTargetException,
  InstantiationException {
  String custom_instance_name = null;

  /**
   * add by yefengsong
   * 通過分隔符->分別獲取到實例名和類名
   */
  if(className.contains("->")){
    String arr[] = className.split("->");
    custom_instance_name = arr[0].trim();
    className = arr[1].trim();
  }

  Object potentialActor = variables.getStored(className);
  if (potentialActor != null && !(potentialActor instanceof String)) {
    addToInstancesOrLibrary(instanceName, potentialActor);
  } else {
    String replacedClassName = variables
      .replaceSymbolsInString(className);
    Object instance = interaction.createInstance(paths,
      replacedClassName, replaceSymbols(args));

    /**
     * add by yefengsong
     * 類實例綁定自定義變量
     */
    setVariable(custom_instance_name,instance);

    addToInstancesOrLibrary(instanceName, instance);
  }
}

修改後驗證代碼作用, 假設有java代碼如下

public class A {
  private String name;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}


public class B {
  private A a;
  private int c;

  public A getA() {
    return a;
  }

  public void setA(A a) {
    this.a = a;
  }

  public int getC() {
    return c;
  }

  public void setC(int c) {
    this.c = c;
  }


}

對應的fitnesse wiki(DecisionTable)腳本如下:

|import        |
|com.quark.test|

|a -> A|
|name  |
|測試    |

|b -> B|
|a     |
|$a    |

|script|json util      |
|show  |toJsonString|$b|


執行結果:

import
com.quark.test

a -> A
name
測試

b -> B
a
$a

script json util
show toJsonString $b {"a":{"name":"測試"},"c":0}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章