【发布时间】:2020-06-27 20:58:05
【问题描述】:
我有一个关于使用参数化测试对我的 API 进行单元测试的问题。现在而不是像
这样构建一个数组列表Arrays.asList(new Object[]{
{1},{2},{3}
});
我想一一读取文件中的行,将它们拆分空间并将它们填充到数组中。 这样一来,一切都将被概括。任何人都可以通过示例向我推荐任何这样的方法吗?
还有一种方法可以在不将各种参数声明为私有成员并在测试单元的构造函数中初始化它们的情况下进行测试?
编辑:邓肯要求的代码
@RunWith(Parameterized.class)
public class JunitTest2 {
SqlSession session;
Integer num;
Boolean expectedResult;
static BufferedInputStream buffer = null;
public JunitTest2(Integer num, Boolean expected){
this.num = num;
this.expectedResult = expected;
}
@Before
public void setup() throws IOException{
session = SessionUtil.getSqlSessionFactory(0).openSession();
SessionUtil.setSqlSession(session);
buffer = new BufferedInputStream(getClass().getResourceAsStream("input.txt"));
System.out.println("SETUP!");
}
@Test
public void test() {
assertEquals(expectedResult, num > 0);
System.out.println("TESTED!");
}
@Parameterized.Parameters
public static Collection getNum() throws IOException{
//I want my code to read input.txt line by line and feed the input in an arraylist so that it returns an equivalent of the code below
return Arrays.asList(new Object[][]{
{2, true},
{3, true},
{-1, false}
});
}
@After
public void tearDown() throws IOException{
session.close();
buffer.close();
System.out.println("TEARDOWN!");
}
}
另外我的 input.txt 如下:
2 true
3 true
-1 false
【问题讨论】:
-
所以你想要一个包含
1 2 3内容的文件并解析它?你能告诉我们你尝试了什么,这样我们就知道你到底卡在哪里了吗?关于第二个问题,如果您想使用参数化测试,答案是否定的。 -
第二部分,你可以创建公共字段(不需要构造函数)并用
@Parameter注释它们(见this sample) -
请看我的代码。我是 Junit 的新手,所以只是一个初学者应用程序。
-
参见stackoverflow.com/questions/63899534/…关于JUnit5内置的版本@ParameterizedTest
标签: java unit-testing junit junitparams