非常需要tdd,junit,测试等。
我该怎么测试呢?
public String toString()
{
StringBuilder builder = new StringBuilder();
builder.append(SalesExceptionHandlerImpl.class.getName() + " [");
builder.append("toString()=");
builder.append(super.toString());
builder.append(", getClass()=");
builder.append(getClass());
builder.append(", hashCode()=");
builder.append(hashCode());
builder.append("]");
return builder.toString();
}
尝试的代码:
public class RMSalesExceptionHandlerImplTest {
@Test
public void toStringReturnAnEmptyString(){
SalesExceptionHandlerImpl salesExceptionHandlerImpl = new SalesExceptionHandlerImpl();
assert.areEqual(salesExceptionHandlerImpl.toString(), "");
}
}
答案 0 :(得分:3)
如果您知道方法的结果,那么您就不关心它的实现。 如果您的函数是toString,则必须简单地测试函数的结果。
public void testToString() {
String result = "myResultThatIMustObtain";
assertEquals(myInstance.toString(), result);
}
答案 1 :(得分:2)
你迟到了。使用TDD,您首先编写单元测试,然后执行。您已经实施但没有测试。您可以编写缺失的单元测试(完全没问题)或者您可以忘记当前的实现并尝试测试优先方法(如TDD)。
在测试中,首先从非常简单的测试开始。对于toString()
方法,它可能类似于(使用JUnit for assertions):
public void toString_returnsEmptyString()
{
SomeClass classUnderTest = new SomeClass();
assertEquals(classUnderTest.toString(), "");
}
为什么你首先需要这样的测试?这可能看起来很愚蠢,但确保您可以毫无问题地创建测试环境(SomeClass
实例)。这一点非常重要,因为在处理更复杂的测试和更复杂的问题时,您希望避免任何干扰。
一旦确定您可以创建对象并且可以返回一些字符串,则可以添加更多测试。像:
public void toString_returnsStringWithSuperClassToStringEmbedded()
{
SomeClass classUnderTest = new SomeClass();
assertThat(classUnderTest.toString(), contains("This is super's toString"));
}
然后添加适当的实现。
下一步是停止编写测试并检查是否可以重构任何内容(遵循Red-Green-Refactor咒语)。在这个阶段,很可能不是。这意味着您添加更多测试(getClass,hashCode,格式等)。冲洗&重复,直到你达到对测试和实施都满意的程度。
最终,你最终会进行大量测试。也许其中一些是多余的,你必须删除它们(就像你写的第一个测试)。也许其中一些可以合并为单一测试。也许您只需要一个测试来验证生成的字符串是否符合您的预期。但这就是TDD的含义 - 您的测试和实施通常会大量发展,直到达到最符合您要求的形式。