csv 的 mockito 和单元测试 reader
mockito and unit test for a csv reader
在 csv reader 的单元测试中模拟我们想要读取 csv 并将它们放入 POJO 并进行一些查询是否有意义? (特别是我的意思是模拟文件读取)。
让我们假设以下示例:
ICsvBeanReader beanReader = null;
beanReader = new CsvBeanReader(new FileReader(csvFileName),
CsvPreference.STANDARD_PREFERENCE);
String[] header = beanReader.getHeader(true);
Book bookBean = null;
while ((bookBean = beanReader.read(Book.class, header,
processors))!= null) {
books.add(bookBean);
}
提前致谢。
这似乎是个好主意 - 它可以将正在测试的单元与 read() 的实现分离。这样,如果您更改为不同的库来读取文件,您的单元测试不必全部重写。
严格来说,单元测试旨在测试一段代码的功能,而不是代码与程序外部部分的集成。测试读取实际文件的功能将是 集成 测试,而不是单元测试。集成测试也很重要,因为您想确保您的文件 reader 可以在实际文件上运行。但是为了保证代码运行,也可以创建单元测试。
要创建单元测试,您可以将文件 reader 对象模拟为 return 虚拟响应(byte[]
或接口提供的任何类型)。然后您可以填充您的 POJO 并断言一切都按预期运行。
总而言之,集成测试和单元测试都可能是个好主意,但单元测试可以让您隔离和测试代码的逻辑。
更新:
为了考虑到您更新后的代码示例,我会像这样模拟 CsvBeanReader
:
ICsvBeanReader mockedBeanReader = mock(CsvBeanReader.class);
Book book1 = new Book();
Book book2 = new Book();
Book book3 = new Book();
when(mockedBeanReader.getHeader(true))
.thenReturn(new String[]{"here", "is", "header"});
when(mockedBeanReader.read(Book.class, header, processors))
.thenReturn(book1)
.thenReturn(book2)
.thenReturn(book3);
现在您有了一个完全模拟的 CsvBeanReader
对象。您可以对 POJO 执行断言并验证代码的业务逻辑是否正确。
在 csv reader 的单元测试中模拟我们想要读取 csv 并将它们放入 POJO 并进行一些查询是否有意义? (特别是我的意思是模拟文件读取)。
让我们假设以下示例:
ICsvBeanReader beanReader = null;
beanReader = new CsvBeanReader(new FileReader(csvFileName),
CsvPreference.STANDARD_PREFERENCE);
String[] header = beanReader.getHeader(true);
Book bookBean = null;
while ((bookBean = beanReader.read(Book.class, header,
processors))!= null) {
books.add(bookBean);
}
提前致谢。
这似乎是个好主意 - 它可以将正在测试的单元与 read() 的实现分离。这样,如果您更改为不同的库来读取文件,您的单元测试不必全部重写。
严格来说,单元测试旨在测试一段代码的功能,而不是代码与程序外部部分的集成。测试读取实际文件的功能将是 集成 测试,而不是单元测试。集成测试也很重要,因为您想确保您的文件 reader 可以在实际文件上运行。但是为了保证代码运行,也可以创建单元测试。
要创建单元测试,您可以将文件 reader 对象模拟为 return 虚拟响应(byte[]
或接口提供的任何类型)。然后您可以填充您的 POJO 并断言一切都按预期运行。
总而言之,集成测试和单元测试都可能是个好主意,但单元测试可以让您隔离和测试代码的逻辑。
更新:
为了考虑到您更新后的代码示例,我会像这样模拟 CsvBeanReader
:
ICsvBeanReader mockedBeanReader = mock(CsvBeanReader.class);
Book book1 = new Book();
Book book2 = new Book();
Book book3 = new Book();
when(mockedBeanReader.getHeader(true))
.thenReturn(new String[]{"here", "is", "header"});
when(mockedBeanReader.read(Book.class, header, processors))
.thenReturn(book1)
.thenReturn(book2)
.thenReturn(book3);
现在您有了一个完全模拟的 CsvBeanReader
对象。您可以对 POJO 执行断言并验证代码的业务逻辑是否正确。