我創建了一個集團電話Authentication。這個 bloc 發出兩個狀態呼叫Autenticated,并UnAuthenticated基于AuthenticationRepository哪個依賴注入到 bloc 中。
然后我嘗試為單元測驗創??建一個模擬MockAuthenticationRepository但我得到了兩個不同的狀態,所以我必須創建兩個不同版本的存盤庫MockAutenticatedAuthenticationRepository,并MockUnAuthenticatedAuthenticationRepository測驗這兩種情況。
但也許有另一個集團基于存盤庫發出 5 或 6 個狀態,然后我必須為它創建 5 到 6 個模擬存盤庫。這聽起來并沒有大錯,因為一個集團不會無限增長。但我仍在尋找更好的方法來解決這個問題。有人有更好的主意嗎?
uj5u.com熱心網友回復:
您可以使用包 mocktail ( https://pub.dev/packages/mocktail ) 來設定存盤庫的正確行為。使用包 bloc_test ( https://pub.dev/packages/bloc_test ) 來實作 bloc 單元測驗也是一個好主意。
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://www.uj5u.com/qianduan/468149.html
下一篇:單元測驗:模擬框架與存根實作
