【问题标题】:java: abstracting methods and testing them with JUnit testsjava:抽象方法并使用 JUnit 测试对其进行测试
【发布时间】: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。并最终确定。零需要在其他任何地方初始化它。

标签: java junit


【解决方案1】:

感谢 cmets
只需在构造函数中初始化 teststring

public Class1(String classtext){
        this.mystring = classtext;
        teststring = "Teststring";
    }  

在 Class1.java 中,测试现在可以正常工作了

  • junit 输出
    进程以退出代码 0 结束

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多