【发布时间】:2014-06-10 20:10:01
【问题描述】:
我有一个 Thing 类,其中包含各种字符串和一组东西。 我必须测试 Message 类是否可以在 MessageTest 类中正确地将 item 作为 "found" 返回。
什么是最优雅/最有效的测试方法?
我应该创建什么样的假对象,我该如何测试/反对它?
public class Thing
{
public String a;
public String b;
public String c;
public String d;
public String e;
public Collection<Stuff> collection;
}
public class Message
{
private String item;
public Message(Thing thing)
{
for (Stuff stuff : thing.collection)
{
if (stuff.getItem().equals("key"))
{
item = "found";
}
}
}
@Override
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append(a);
builder.append(b);
builder.append(c);
builder.append(d);
builder.append(e);
builder.append(item);
return builder.toString();
}
}
【问题讨论】:
-
我亲自阅读了这篇关于 jUnit 的精彩教程,发现它非常清晰且写得很好:vogella.com/tutorials/JUnit/article.html
-
看起来你不需要伪造任何东西。只需让您的每个测试用例构造一个合适的
Thing,将其传递给Message,然后断言toString结果的内容。 -
我会假设
Message要么对item做某事,要么通过getter 公开它。这就是我要断言的。我不会断言toString(),因为很多人(包括我)只是非正式地使用它来进行日志记录和调试。因此,它的格式可能会因与您要测试的功能完全无关的原因而改变。而且您不希望每次发生这种情况时都必须调整您的测试。
标签: java unit-testing testing junit