我想在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.
}
}
在此设置中设置演示者进行测试的正确方法是什么?
答案 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
是抽象的主要原因之一,因此我们可以提供不同的测试实现。