我的应用程序中包含以下代码:
expect(() => dataSource.getLastPost(), throwsA(TypeMatcher<CacheException>()));
这导致以下错误
Expected: throws <Instance of 'TypeMatcher<CacheException>'>
Actual: <Closure: () => Future<PostModel>>
Which: threw <Instance of 'CacheException'>
如果我删除包装CacheException的TypeMatcher ...
expect(() => dataSource.getLastPost(), throwsA(CacheException()));
那么它仍然会给出类似的错误
Expected: throws <Instance of 'CacheException'>
Actual: <Closure: () => Future<PostModel>>
Which: threw <Instance of 'CacheException'>
我想知道我在做什么错?无论哪种方式,很明显,我们都在期待CacheException并抛出CacheException。那为什么期望测试没有通过?
这是正确的写throwsA(TypeMatcher<CacheException>())
您可能遇到的问题是,在Flutter和测试的上下文中,有两个名称为的类TypeMatcher
:
matcher
,用于测试flutter/widgets
,导航内BuildContext
。它们都以相同的方式使用,也称为TypeMatcher<SomeClass>
。但是其中只有一个是Matcher
,测试可以理解。
您的问题是,您很可能TypeMatcher
从中使用过flutter/widgets
。由于它不是匹配器,因此:
throwsA(TypeMatcher<MyClass>())
被解释为:
throwsA(equals(TypeMatcher<MyClass>())
解决的办法是使用正确的TypeMatcher
,从package:matcher/matcher.dart
。
但是,首先,你应该不使用TypeMatcher
直接。
代替:
throwsA(TypeMatcher<MyClass>())
您应该使用速记isA<T>
匹配器:
throwsA(isA<MyClass>())
这样可以完全消除名称冲突
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句