class Repository{
final NetworkManager networkManager;
const Repository({required this.networkManager});
TodoModel? getTodo(){
if (networkManager.isNetworkAvailable()){
return const TodoModel(id: 1, todo: "todo", completed: true, userId: 123);
}
else{
return null;
}
}
}
class NetworkManager{
bool isNetworkAvailable(){
return true;
}
}
测试 Repository 类中的 getTodo() 方法的正确方法应该是什么?
我需要在这里嘲笑什么?
我们可以在不模拟任何东西或不使用模拟库的情况下对实际的 API 调用和响应进行单元测试吗?
单元测试是测试代码片段的行为。通常这将包括编程逻辑、给定某些输入的预期路径。
对于您的情况,我假设
NetworkManager
不是由您实现的,您发布的代码只是一个示例。因此,要测试此存储库,您需要模拟 NetworkManager
(这是一个单独的类),为 isNetworkAvailable()
设置预期返回值,并将模拟传递到 Repository
的构造函数中。
如果您需要测试 NetworkManager 的行为,您可以仅为该类创建一个单独的测试文件。
对于第三个问题,您需要集成测试,这是一种测试多个部分协同工作的方法,理想情况下不需要模拟任何东西。正如 Flutter 文档所说:
集成测试验证整个应用程序的行为。此测试也可以称为端到端测试或 GUI 测试。
您可以在Flutter 文档 - 集成测试概念上阅读更多相关信息。