这可能是过度的,但我无法理解它是什么,以及何时/为何使用它。由于我正在学习dart
,我将在dart
中提供我的示例,我希望我也会在dart
中得到答案。我也是单元测试的新手。
想象一下,我有3个班级,Person
,Translator
,Db
。 Person
可以进行查询,Translator
可以翻译Person
提供的查询,因此Db
可以对其进行处理。
class Person {
query(String args, Translator translator) =>
translator.query(args);
}
class Translator {
Db db;
Translator(this.db);
query(args) => db.query(args); // assuming Translator knows what the db type is
}
class Db {
String type;
Db(this.type);
query(args) => // query with args, return the result;
}
现在我想测试Translator
是否表现良好:
void main() {
var mongoDB = new Db('mongodb'),
translator = new Translator(mongoDB),
person = new Person(),
result = person.query('give me 1 Person named Andy', translator); // get the result
expect(result['name'], equals('Andy'));
}
根据我的阅读,如果我有上述案例,Translator
依赖于Db
和Db
io,则会使用模拟。
我应该模拟哪个课程,Translator
或Db
?
以什么方式/我如何模拟课程?
我从嘲笑中获得了什么好处?
答案 0 :(得分:1)
模拟框架的主要目的是模拟代码中与外部系统的集成。如果您不模拟依赖项,那么您正在编写集成测试,而不是单元测试。这样做的一大好处是您不依赖于外部系统中的现有数据(数据库中的数据等)。还有一个性能优势,因为您不必对外部系统进行可能的慢速调用。