2015-01-16 5 views
0

очень нужно tdd, junit, тестирование и т. Д.как написать тестовый пример junit для метода toString()

как я могу проверить это?

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(), ""); 
    } 
} 

ответ

1

Вы опаздываете на вечеринку. С TDD вы сначала записываете единичный тест, а затем выполняете его. У вас уже есть реализация, но тест отсутствует. Вы можете написать отсутствующий тест модуля (это было бы прекрасно), или вы можете забыть о своей текущей реализации и попробовать test-first (например, 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, форматирование и т. Д.). Rinse & повторяйте до тех пор, пока вы не достигнете точки, где вы довольны обоими вашими испытаниями и реализацией.

В конце концов, вы получите кучу тестов. Возможно, некоторые из них являются излишними, и вам нужно их удалить (например, самый первый тест, который вы написали). Возможно, некоторые из них могут быть объединены в один тест. Возможно, вам просто нужен один тест, который проверяет, что созданная строка находится в точной форме, как вы ожидаете. Но это то, что TDD - ваши тесты и реализация обычно будут развиваться сильно, пока они не достигнут формы, которая наилучшим образом соответствует вашим требованиям.

+0

привет. это кажется очень полезным, и я буду отмечать его как правильное, если вы можете помочь мне с этим. код, с которым я пошел, находится в моем вопросе как отредактированный. , но «assert.areEqual» подчеркивается красным цветом, говоря, что метод не определен для типа RMSalesExceptionHandlerImpl (имя моего класса). есть идеи? – BlackMagma

+0

@BlackMagma: должно быть [assertEquals] (http://junit.sourceforge.net/javadoc/org/junit/Assert.html), предполагая, что вы используете JUnit. Исправлены образцы кода. –

+0

FYI assertNotNull работал лучше всего в этом случае. assertEquals не удалось. спасибо за вашу помощь, хотя – BlackMagma

2

Если вы знаете, результат вашего метода, вы не заботитесь реализацию об этом. Если ваша функция является toString, вы должны просто проверить результат своей функции.

public void testToString() { 
    String result = "myResultThatIMustObtain"; 
    assertEquals(myInstance.toString(), result); 

} 
Смежные вопросы