我在Dart类中有一个方法,该方法接受BuildContext参数,如下所示:

class MyClass {

  <return_type> myMethodName(BuildContext context, ...) {
        ...
        doSomething
        return something;
    }
}

我想测试该方法是否按预期工作:
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
...

void main() {
  MyClass sut;

  setUp(() {
    sut = MyClass();
  });

  test('me testing', () {

    var actual = sut.myMethodName(...);

    expect(actual, something);
  });
}

当然,这是行不通的,因为myMethodName方法需要参数BuildContext类型。该值在整个应用程序本身中都可用,但不确定在单元测试中从何处获取。

最佳答案

实际上,您可以模拟BuildContext,以便测试能够顺利进行。我认为这更好,但可能不是您正在寻找的解决方案。BuildContext是一个抽象类,因此无法实例化。任何抽象类都可以通过创建该类的实现来模拟。如果我以您的示例为例,则代码将如下所示:

class MockBuildContext extends Mock implements BuildContext {}

void main() {
   MyClass sut;
   MockBuildContext _mockContext;

   setUp(() {
     sut = MyClass();
     _mockContext = MockBuildContext();
   });

   test('me testing', () {

   var actual = sut.myMethodName(_mockContext, ...);

   expect(actual, something);
  });
}

07-24 09:49