【发布时间】:2020-12-09 21:00:51
【问题描述】:
这里是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.ComparisonFailure:
预期:测试...测试字符串
实际 :testing... null
teststring 从未被赋值,因为我没有在这部分测试中调用 changeText 方法
我尝试过什么
只需在 class1.java 中的 printme() 中调用 changeText(mystring) (已注释)就可以完成这项工作,但我想我可以不用它,我正在寻找一个使用从 codetest 调用的构造函数的解决方案。我在这里没有看到什么?
任何帮助将不胜感激 !对不起,错误的代码 sn-p 类型。
【问题讨论】:
-
你说得对,我现在已经更正了
-
为什么不在构造函数中初始化
teststring?为什么将"Teststring"分配给teststring,然后分配给this.teststring?为什么"Teststring"不是常数,考虑到它只取一个值? -
return mystring + teststring;->teststring在第一次调用期间是null。所以方法返回testing... null。似乎您的单元测试工作得很好,因为您没有期待它并且认为它的行为会有所不同。单元测试准确地向您展示了您的假设错误的地方以及代码中的错误所在。 -
@Polygnome 感谢您的评论,我了解测试输出,但在第一次调用中,我还无法将 teststring 的值传递给“changeText”,然后传递给“printme”方法,没有在“printme”中调用“changeText”
-
我将重复 @JustAnotherDeveloper 在构造函数中初始化 testString。并最终确定。零需要在其他任何地方初始化它。