首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Junit4 @Parameterized.Parameters与参数类型失配异常

Junit4 @Parameterized.Parameters与参数类型失配异常
EN

Stack Overflow用户
提问于 2016-03-11 19:00:09
回答 1查看 835关注 0票数 1

下面是我的简单的JUnit参数化测试,在这里我用testdata解析csv,并尝试将它提供给Parametrized.Parameters,但是当我运行它时,我的测试崩溃与java.lang.IllegalArgumentException: argument type mismatch GitHub链接在这里https://github.com/bobrutskovav/MyJunit/tree/master/src/test/java/com/myLogicTest

代码语言:javascript
复制
package com.myLogicTest;

import com.myLogic.Calculator;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class TestJUnit {
    public int firstParameter;
    public int secondParameter;
    public String operation;
    public int expectedResult;

    public static Object[][] data;

    public TestJUnit(int firstParameter, int secondParameter, String operation, int expectedResult) {
        this.firstParameter = firstParameter;
        this.secondParameter = secondParameter;
        this.expectedResult = expectedResult;
        this.operation = operation;
    }

    // @BeforeClass

    @Test
    public void checkCalculator() {
        final Calculator calculator = new Calculator(firstParameter, secondParameter, operation);
        int result;
        switch (operation) {
            case "*":
                result = calculator.multi();
                Assert.assertTrue("Результат (" + result + ") не равен" + expectedResult, result == expectedResult);
                break;
            case "+":
                result = calculator.plus();
                Assert.assertTrue("Результат (" + result + ") не равен" + expectedResult, result == expectedResult);
                break;
            case "-":
                result = calculator.minus();
                Assert.assertTrue("Результат (" + result + ") не равен" + expectedResult, result == expectedResult);
                break;
            case "/":
                result = calculator.del();

                Assert.assertTrue("Результат (" + result + ") не равен" + expectedResult, result == expectedResult);
                break;
        }
    }

    @Parameterized.Parameters(name = "{index}: Действие {0} {2} {1} = {3}")
    public static Collection<Object[]> getTestData() {
        try {
            makeData();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return Arrays.asList(data); //<<<<Give a test data here
    }

    /* OR I CAN GIVE THIS,AND TEST WORKS.. new Object[][]{
                    {2, 2, "*", 4},
                    {2, 0, "+" , 2},
                    {2, 2,"/", 1},
                    {0, 2,"-",-2}
            }*/
    // Method to make a Object[][] for Parameterized.parameters
    public static void makeData() throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\third\\IdeaProjects\\MyJunit\\src\\test\\java\\com\\myLogicTest\\datafile.csv"));

        ArrayList<Object[]> tempArray = new ArrayList<>();
        String newLine;
        Object[] oneString;
        while ((newLine = reader.readLine()) != null) {
            oneString = newLine.split(";");
            tempArray.add(oneString);
        }
        data = new Object[tempArray.size()][];
        for (int i = 0; i < data.length; i++) {
            Object[] row = tempArray.get(i);
            data[i] = row;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-16 11:57:19

这样啊,原来是这么回事!当我解析一个csv文件时,我得到了一个字符串[],但是我的构造函数应用int,我必须在构造函数中使用Integer.parseInt(),现在它可以工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35947922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档