我的应用程序中有以下代码:
expect(() => dataSource.getLastPost(), throwsA(TypeMatcher<CacheException>()));这将导致以下错误
Expected: throws <Instance of 'TypeMatcher<CacheException>'>
Actual: <Closure: () => Future<PostModel>>
Which: threw <Instance of 'CacheException'>如果我去掉TypeMatcher包装CacheException..。
expect(() => dataSource.getLastPost(), throwsA(CacheException()));然后,它仍然给出了一个类似的错误。
Expected: throws <Instance of 'CacheException'>
Actual: <Closure: () => Future<PostModel>>
Which: threw <Instance of 'CacheException'>我在想我做错了什么?无论是哪种方式,很明显,我们都在期待一个CacheException和一个CacheException被抛出。那么为什么期望值测试没有通过呢?
发布于 2019-12-06 14:12:07
编写throwsA(TypeMatcher<CacheException>())是正确的
问题是,在颤振和测试的上下文中,有两个名为TypeMatcher的类
matcher,用于测试flutter/widgets,导航到BuildContext内部。它们都是以相同的方式使用的,也就是TypeMatcher<SomeClass>。但是其中只有一个是Matcher,测试可以理解。
您的问题是,您可能使用了来自flutter/widgets的flutter/widgets。既然这不是比赛,那么:
throwsA(TypeMatcher<MyClass>())解释为:
throwsA(equals(TypeMatcher<MyClass>())解决方案是使用来自package:matcher/matcher.dart的正确的package:matcher/matcher.dart。
但是首先,您应该而不是直接使用TypeMatcher。
而不是:
throwsA(TypeMatcher<MyClass>())您应该使用速记isA<T>匹配器:
throwsA(isA<MyClass>())这将完全消除名称冲突。
https://stackoverflow.com/questions/59214629
复制相似问题