修改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} |