我的JUnit测试给了我几个与它们没有任何关系的错误,我不知道如何修复它

时间:2017-10-11 16:11:50

标签: java junit

所以我正在为学校编程。我遇到了这项任务,需要以下内容:

  

前:由sc检索的下一行包含一个House的文本表示。

     

发布:将众议院的文字表示转换为Houseobject。

     

提示:在地址

中使用thereadmethod

我们还需要用它创建一些JUnit测试。问题是我的测试给了我一个错误,但我不知道我做错了什么。

enter image description here

我认为我的JUnit测试是错误的,因为我只是复制粘贴它从上一个赋值并更改了一些值。它用inputmismatchException说了些什么,所以我注释掉了抛出ioexception但是这仍然没有改变任何东西。我做错了什么?

这是我的阅读之家和tostring方法,请注意我注释掉了我的IOException,因为我认为这是造成它的原因。

    public static House read(Scanner sc)  { //throws IOException
    Address address = Address.read(sc);
    int nRooms = sc.nextInt();
    int salePrice = sc.nextInt();

    House House = new House(address, nRooms, salePrice);
    return House;

/**
 * String representation of the house
 */
public String toString() {
    String address = this.address +"";
            String nRooms = this.nRooms + "";



    String House = address +", "+ nRooms + ", " + salePrice;
    return House;

这是我的地址读取和tostring方法:

public static Address read(Scanner sc) {



    Address address = new Address(sc.next(), sc.next(), sc.next(), sc.next());
    return address;
}

/**
 * String representation of the object Address
 */
public String toString() {
street = street + " ";
number = number +" ";
zipCode = zipCode +" ";

    String address = street + number + zipCode +  city;
    return address;
}

这是我对房子的读取方法的JUnit测试

@Test
    //
    public void testHouseRead() {
        String input = "Janstraat 1 2324VK Leiden, 4, 250000";
        Scanner sc = new Scanner(new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8)));
        String test = House.read(sc).toString();
        assertEquals(input, test);
    }

2 个答案:

答案 0 :(得分:0)

您收到InputMismatchException

Scanner.throwFor()在调用Scanner.nextInt()来电Scanner.nextInt()来电Scanner.next()来电Scanner.throwFor()来调用Scanner.nextInt()

您的代码调用InputMismatchException,因此您应该查看JavaDoc文档,看看它是否告诉您在什么情况下抛出public int nextInt()

  

House.java

     

将输入的下一个标记扫描为int。一个   调用nextInt()形式的这种方法完全符合   与调用nextInt(radix)相同,其中radix是默认值   扫描仪的基数。

     

<强>返回:

     

从输入中扫描的int

     

投掷:

     

InputMismatchException - 如果下一个标记与整数正则表达式不匹配,或者超出范围

     

NoSuchElementException - 如果输入已用尽

     

IllegalStateException - 如果此扫描程序已关闭

所以,“下一个标记与整数正则表达式不匹配,或者超出范围”。

Scanner.readInt()的第79行正在调用ScannerAddress.read()未找到整数。

默认情况下,扫描程序使用空格分割输入。 "4,"消耗前四个令牌。第五个标记是Scanner。这与MODIS文档描述的整数模式不匹配。

答案 1 :(得分:0)

查看Javadoc for ScannerScanner使用空格作为分隔符作为默认值,而输入字符串为Janstraat 1 2324VK Leiden, 4, 250000。因此,您尝试在int中读取的其中一个值为4,,这显然不是数字。