#java #junit
#java #junit
Вопрос:
новичок в java здесь:
итак, я реализовал небольшой тест JUnit, чтобы понять абстракцию методов в java через интерфейс.
Однако передача значений между методами и классами еще не работает полностью.
Мой тестовый набор — это класс, интерфейс и класс JUnit
- реализация
— Codetest.java
package testing;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class Codetest {
Myinterface inter1 = new Class1("testing... ");
@Test
public void testPrintme(){
assertEquals("testing... Teststring", inter1.printme());
inter1.changeText("now its changed... ");
assertEquals("now its changed... Teststring", inter1.printme());
}
}
— Class1.java
package testing;
public class Class1 implements Myinterface {
private String mystring;
private String teststring;
public Class1(String classtext){
this.mystring = classtext;
}
public String printme(){
//changeText(mystring);
return mystring teststring;
}
public void changeText(String changetext){
teststring = "Teststring";
this.teststring = teststring;
this.mystring = changetext;
}
}
— Myinterface.java
package testing;
public interface Myinterface {
// abstract methods
public String printme();
public void changeText(String changetext);
}
- вывод
org.junit.Ошибка сравнения:
ожидается: тестирование…
Фактическая строка теста: тестирование… null
teststring никогда не присваивается значение, потому что я не вызывал метод changeText в этой части теста
Что я пробовал
простой вызов changeText(mystring) (комментируется) внутри printme() в class1.java выполняет свою работу, но я думаю, что мог бы обойтись без этого, я ищу решение с помощью конструктора, вызываемого из codetest. Чего я здесь не вижу?
Любая помощь будет с благодарностью! извините за неправильный тип фрагмента кода.
Комментарии:
1. вы правы, теперь я это исправил
2. Почему вы не инициализируете
teststring
в конструкторе? Почему вы назначаете"Teststring"
toteststring
, а затем tothis.teststring
? Почему это"Teststring"
не константа, учитывая, что она принимает только одно значение?3.
return mystring teststring;
->teststring
выполняетсяnull
во время первого вызова. Таким образом , методы возвращаютсяtesting... null
. Похоже, ваши модульные тесты работают просто отлично, потому что вы этого не ожидали и думали, что они будут вести себя по-другому. модульный тест точно показывает вам, где ваши предположения неверны и где находится ошибка в вашем коде.4. @Polygnome спасибо за ваш комментарий, я понимаю результат теста, но я пока не могу получить значение teststring для передачи в ‘changeText’, а затем в метод ‘printme’ при первом вызове, без вызова ‘changeText’ внутри ‘printme’
5. Я повторю для @JustAnotherDeveloper инициализировать тестовую строку в конструкторе. И сделайте это окончательным. Нет необходимости инициализировать его где-либо еще.
Ответ №1:
Решаемая благодаря комментариям
Путем простой инициализации teststring в конструкторе
public Class1(String classtext){
this.mystring = classtext;
teststring = "Teststring";
}
в Class1.java теперь тест работает просто отлично
- вывод junit
Процесс завершен с кодом выхода 0