当依赖于视图时,如何在基于MVP的MVP设计中对演示者进行单元测试?

时间:2019-07-09 08:28:44

标签: unit-testing flutter mvp flutter-test

我想在flv的mvp设计中测试演示者的功能,但是我无法实例化它以进行测试,因为它取决于视图并且视图是有状态的小部件的状态。

当我将null用作视图时,要测试的功能失败,因为它试图调用该视图的功能。

合同:

abstract class View extends BaseView {

  setSelectedWord(String word);

}

abstract class Presenter {
   toTest(word);
}

演示者:

class PresenterImpl implements Presenter {
  ///
  View _view;

  @override
  toTest(String word) {
    // do sth.
    _view.setSelectedWord(word);
  }
}

查看:

class Screen extends BaseScreen {
  Screen({Key key}) : super(key: key);

  @override
  _State createState() => _State();
}

class _State extends BaseState implementsView {
  ///
  Presenter _presenter;

  setSelectedWord(word){
     //do sth.
   }
}

在此设置中设置演示者进行测试的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

从示例代码中尚不清楚View实例是如何注入到PresenterImpl中的,但是假设通过构造函数,您只需提供{{1}的其他实例}用于单元测试,一种不依赖Flutter的测试。

例如,您可以创建一个View类,该类也扩展了MockView抽象类,该View应该不依赖Flutter,并且在应用程序的其余部分中不需要上下文。

一个简单的示例如下:

MockView

请注意,以这种方式进行测试是class MockView extends View { String _selectedWord; // getter setSelectedWord(String word) => _selectedWord = word; } presenterTest() { String word = "test"; MockView mockView = MockView(); PresenterImpl underTest = PresenterImpl(mockView); underTest.toTest(word); assert(word == mockView.selectedWord); } View是抽象的主要原因之一,因此我们可以提供不同的测试实现。