好的,所以我有这个问题,我需要创建一个具有构造函数来接受字符串的类,一个名为add的方法,它接受一个String-Object对,其中name是占位符名称和一个名为render的方法它使用add中给出的对替换模板中的占位符。
所有这些都需要能够毫无问题地完成以下测试。
@Test
public void testString() {
View view = new View("Hi, my name is {name}!");
view.add("name", "Josh");
Assert.assertEquals("Hi, my name is Josh!", view.render());
}
@Test
public void testList() {
View view = new View("<table>{rows}</table>");
view.add("rows", Arrays.asList("<tr><td>Louis</td><td>Armstrong</td></tr>", "<tr><td>Benny</td><td>Goodman</td></tr>"));
Assert.assertEquals("<table><tr><td>Louis</td><td>Armstrong</td></tr><tr><td>Benny</td><td>Goodman</td></tr></table>", view.render());
}
@Test
public void testView() {
View view = new View("<table>{rows}</table>");
View row1 = new View("<tr><td>{firstName}</td><td>{lastName}</td></tr>");
row1.add("firstName", "Louis");
row1.add("lastName", "Armstrong");
View row2 = new View("<tr><td>{firstName}</td><td>{lastName}</td></tr>");
row2.add("firstName", "Benny");
row2.add("lastName", "Goodman");
view.add("rows", Arrays.asList(row1, row2));
Assert.assertEquals("<table><tr><td>Louis</td><td>Armstrong</td></tr><tr><td>Benny</td><td>Goodman</td></tr></table>", view.render());
}
唯一的问题是我根本不知道如何解决这个问题。任何人都可以给我一个正确的推动方向吗?
答案 0 :(得分:2)
由于这似乎是homework,我不会提供完整的解决方案,但根据要求,我会提供一些一般性的考虑/提示。
以第一个测试用例为例:
将View
构造函数的参数/参数捕获为成员变量。我们将调用该成员变量text
。
捕获提供给add
的每个键值关系。通常,这将使用Mapping数据结构来完成。如果您无法使用该选项,则可以随时通过每次调用text
直接修改add
。
执行render
的替换。这很容易通过replace method完成。如果在text
中修改了add
,则只需将其返回。
所有这些都没有将这些实现细节包装到View
类中,它看起来像
@Test
public void testString() {
String text = "Hi, my name is {name}!";
final Map<String, String> placeHolderToReplacement = new HashMap<>();
placeHolderToReplacement.put("name", "Josh");
for (Map.Entry<String, String> entry : placeHolderToReplacement.entrySet()) {
text = text.replace("{"+entry.getKey()+"}", entry.getValue());
}
Assert.assertEquals("Hi, my name is Josh!", text);
}
我认为应该给你足够的起点来解决问题。
现在,帖子明确指出String-Object pair
。它必须是采用add
对象集合和View
的完全相同的String
方法吗?您必须考虑是否提供overloaded
方法与单一方法是否可接受。如果它必须是相同的方法,那么你需要自己进行类型检查。
答案 1 :(得分:0)
public class View {
private String v;
public View(String v) {
this.v = v;
}
public void add(String key, String value) {
v = v.replaceAll("{" + key + "}", value);
}
public String render() {
return v;
}
}