我创建了一个名为Authentication
的集团。该集团根据注入到集团的依赖项Autenticated
和UnAuthenticated
发出两个状态调用AuthenticationRepository
。
然后我尝试为单元测试创建一个模拟的MockAuthenticationRepository
,但是我得到了两个不同的状态,所以我必须创建两个不同版本的存储库,比如MockAutenticatedAuthenticationRepository
和MockUnAuthenticatedAuthenticationRepository
来测试这两个案例。
但是,可能还有一个基于存储库的另一个组发出5或6个状态,那么我必须为它创建5-6个模拟存储库。这听起来并没有太大的错误,因为一个集团不可能无限增长。但我还是在寻找更好的方法来解决这个问题。有人有更好的主意吗?
发布于 2022-04-27 09:18:59
您可以使用包mocktail (https://pub.dev/packages/mocktail)来设置存储库的正确行为。使用包bloc_test (https://pub.dev/packages/bloc_test)来实现单元测试也是个好主意。
import 'package:mocktail/mocktail.dart';
class MockAutenticatedAuthenticationRepository extends Mock implements AutenticatedAuthenticationRepository {};
void main() {
late MockAutenticatedAuthenticationRepository authMock;
late AuthBloc bloc;
setUp(() {
authMock = MockAutenticatedAuthenticationRepository();
bloc = AuthBloc(auchRepository: authMock);
});
blocTest(
'should emit [AuthLoadingState, AuthSuccessState] when login data is correct',
build: () {
when(() => authMock.doAuth(any())).thenAnswer((_) async => true);
return bloc;
},
act: (dynamic b) => b.add(AuthEvent.login("username","password")),
expect: () => [AuthState.loading(), AuthState.success()],
);
blocTest(
'should emit [AuthLoadingState, AuthFailureState] when login data is incorrect',
build: () {
when(() => authMock.doAuth(any())).thenAnswer((_) async => false);
return bloc;
},
act: (dynamic b) => b.add(AuthEvent.login("username","wrong password")),
expect: () => [AuthState.loading(), AuthState.failure()],
);
}
您必须修改方法调用,等等,因为我没有示例代码。但我认为这会帮助你解决你的问题。
https://stackoverflow.com/questions/72021724
复制相似问题