在Dart中使用Mockito,是否有一种方法只模拟对象的部分内容?

11

我目前正在尝试使用Flutter和Dart进行测试驱动的开发。 我有一个对象,其中有两种方法,第一种方法执行http调用,第二个方法调用第一个方法。 为了测试第一个函数,我模拟了该函数的依赖项(即http调用)。

现在我想测试第二个方法,但我无法找到一种只模拟第一个函数而保留其余对象完整性的方法。结果是,我只能再次模拟第一个方法的依赖项,这导致整个函数被重新执行。这违反了单元测试的全部目的。

似乎在模拟对象时只有全盘接受或者不接受的方式。我想知道如何处理某些对象依赖于同一对象上的方法的情况。 使用FakeMock不能让我调用原始方法。spy已过时,将模拟函数分配给其中一个函数也无法工作,因为Dart不允许我重新分配方法。


  1. 你可以让你的“Mock”对象在某些操作上委托给真实对象(尽管不建议这样做)。
  2. 在你的特定情况下,也许你可以使用HttpOverrides来模拟HttpClient
- jamesdlin
谢谢您的建议。我也考虑了选项一,但由于我将第一个方法称为this.firstMethod(),它与对象绑定并在调用第一个方法时自动调用。替换调用只能通过 DI 传递一个新的 this 来实现。或者我有什么遗漏吗?虽然 HttpOverrides 在一般情况下很有用,但我不知道它如何帮助我减轻再次执行第一个方法的代码。我想坚持“一个函数一个测试”的原则。 - jns_ai_unr
@jamesdlin 谢谢你。你的链接让我找到了一个不错的解决问题的方法。请看下面。 - jns_ai_unr
1个回答

1
我找到了解决问题的方法。根据评论中提到的this链接,"[t]esting with real objects is preferred over testing with mocks"。在我的情况下,我只需子类化我正在测试的主对象并替换我不测试的(第二个)方法即可。这似乎起作用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接