首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“`TypeMatcher`”与“`throwsA`”连用时不起作用

“`TypeMatcher`”与“`throwsA`”连用时不起作用
EN

Stack Overflow用户
提问于 2019-12-06 14:01:10
回答 1查看 1.5K关注 0票数 5

我的应用程序中有以下代码:

代码语言:javascript
复制
expect(() => dataSource.getLastPost(), throwsA(TypeMatcher<CacheException>()));

这将导致以下错误

代码语言:javascript
复制
Expected: throws <Instance of 'TypeMatcher<CacheException>'>
  Actual: <Closure: () => Future<PostModel>>
   Which: threw <Instance of 'CacheException'>

如果我去掉TypeMatcher包装CacheException..。

代码语言:javascript
复制
expect(() => dataSource.getLastPost(), throwsA(CacheException()));

然后,它仍然给出了一个类似的错误。

代码语言:javascript
复制
Expected: throws <Instance of 'CacheException'>
  Actual: <Closure: () => Future<PostModel>>
   Which: threw <Instance of 'CacheException'>

我在想我做错了什么?无论是哪种方式,很明显,我们都在期待一个CacheException和一个CacheException被抛出。那么为什么期望值测试没有通过呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-06 14:12:07

编写throwsA(TypeMatcher<CacheException>())是正确的

问题是,在颤振和测试的上下文中,有两个名为TypeMatcher的类

它们都是以相同的方式使用的,也就是TypeMatcher<SomeClass>。但是其中只有一个是Matcher,测试可以理解。

您的问题是,您可能使用了来自flutter/widgetsflutter/widgets。既然这不是比赛,那么:

代码语言:javascript
复制
throwsA(TypeMatcher<MyClass>())

解释为:

代码语言:javascript
复制
throwsA(equals(TypeMatcher<MyClass>())

解决方案是使用来自package:matcher/matcher.dart的正确的package:matcher/matcher.dart

但是首先,您应该而不是直接使用TypeMatcher

而不是:

代码语言:javascript
复制
throwsA(TypeMatcher<MyClass>())

您应该使用速记isA<T>匹配器:

代码语言:javascript
复制
throwsA(isA<MyClass>())

这将完全消除名称冲突。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59214629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档