如何在测试中正确覆盖 Riverpod 生成的提供程序?

Ego*_*kov 5 flutter riverpod riverpod-generator

我有存储库,并为该存储库生成提供程序,如下所示:

@riverpod
class Repository extends _$Repository {
  @override
  String? build() {
    return null;
  }

  Future<void> fetchData() async {
    state = "Hello World!";
  }
}
Run Code Online (Sandbox Code Playgroud)

我想测试我的应用程序。在测试中我想模拟这个存储库的提供者。但我有来自 Riverpod_lint 的消息:Providers which are overridden in a non-root ProviderContainer/ProviderScope should specify dependencies.

我的测试如下所示:

@riverpod
class MockedRepository extends _$MockedRepository implements Repository {
  @override
  String? build() {
    return null;
  }

  Future<void> fetchData() async {
    state = "Hello Mocked World!";
  }
}

void main() {
  testWidgets('override repositoryProvider', (tester) async {
    await tester.pumpWidget(
      ProviderScope(
        overrides: [
          repositoryProvider.overrideWith(() => MockedRepository()),
        ],
        child: const App(),
      ),
    );
  });
}
Run Code Online (Sandbox Code Playgroud)

我找到了一个解决方案:当我在原始Repository 类中添加@Riverpod(dependencies: [])注释而不是@riverpod注释时,riverpod_lint 停止消息传递。但我不明白为什么我应该为了测试目的而纠正我原来的课程。我应该总是描述依赖关系吗?也许有一种方法可以使 ProviderContainer/ProviderScope 在测试中扎根?