【发布时间】:2019-05-09 14:48:53
【问题描述】:
我想向我的数据模型添加方法,因此我需要一种方法在我的 tdd 数据文件中指定它们。 例如有一个包含两个标量的 tdd 数据文件:
a: 1
b: 1
我想添加一个方法area 将它们相乘。
这甚至可能吗?如果可以,我该如何实现?
【问题讨论】:
标签: fmpp
我想向我的数据模型添加方法,因此我需要一种方法在我的 tdd 数据文件中指定它们。 例如有一个包含两个标量的 tdd 数据文件:
a: 1
b: 1
我想添加一个方法area 将它们相乘。
这甚至可能吗?如果可以,我该如何实现?
【问题讨论】:
标签: fmpp
假设你有一个MyUtils,它有一个foo() 和一个bar() 方法,并且你想在模板中访问它们。
您可以使用data 中的eval 数据加载器将任意Java 对象添加到模型中,例如myUtils: eval('new com.example.MyUtils()')。然后您可以在模板中发出myUtils.foo()。但是,您想在顶层添加方法。这也是可能的。在eval 和自定义DataLoader(无论您想使用哪个)中,您都可以访问engine,fmpp.Engine 对象。然后你就可以使用这个技巧了:
// Note: In case you are using eval, use Java 1.2 syntax (no generics).
TemplateHashModel myUtilsModel = (TemplateHashModel) engine.wrap(new MyUtils());
Map<String, TemplateModel> myUtilsMethodModels = new HashMap<>();
myUtilsMethodModels.put("foo", myUtilsModel.get("foo"));
myUtilsMethodModels.put("bar", myUtilsModel.get("bar"));
return myUtilsMethodModels;
然后你将Map 添加到data 没有名字。 (如果您将 Map 添加到 data 而不添加名称,则其键将成为顶级变量。)
当然可以将其打磨得更好,例如自动查找所需的方法等。另外,我没有在上面尝试过(所以可能会出现拼写错误)。但这是基本思想。 (我想如果 FMPP 有一个加载类的静态方法的数据加载器,那将是实用的......但是,现在它没有。)
【讨论】: