我正在努力改进我的代码的单元测试 - 包括尝试一些tdd。我有一个问题是我应该如何测试解析csv文件的对象。让我举个小例子......
class EventLog {
parse() {
// load csv file, create array of Events
}
getEvents(options) {
// depending on options, return correct set of events
}
}
class Event {}
首先,我想为我的getEvents
方法编写测试,以确保不同的选项产生正确的结果。在这种情况下,我是否要为解析创建一个存根,我可以传递一组Events
,然后对该数据集运行我的测试?
其次,我需要测试解析方法。计划测试简单的事情,比如文件不存在,格式与预期不符,创建正确Events
等。为此,我应该存储一些涵盖案例的样本.csv
文件需要?或者将loadCsv()
方法拉出来并将其更加有效?
答案 0 :(得分:1)
班级使用有多难?
如果它很简单,就像解析器需要一些字符串一样,那么你可以考虑直接使用它。使用ES6类,您甚至可以声明新的class TestEventLog extends EventLog
并将继承用作最小存根。这是最少的开销,是我最喜欢的策略。
如果类特别复杂,请记住,通过小型(单元)测试,您需要关注一小部分代码。如果你看到从一个你没有测试过的类中调用了大量的方法,那就是测试不良的气味。
在这种情况下,我可能会从继承和替换开始:
class TestEventLog extends EventLog {
parse() {
// ignore arguments, return known test data
return [['foo', 1], ['bar', 2]];
}
}
指导原则应该是尽可能少地引入代码。您编写的支持测试的代码越多,您需要测试的代码就越多。