我有一个模型视图主持人三合会。我想知道测试演示者的常用方法是什么。
我想到的第一件事是实例化演示者并实例化实际视图,然后断言该视图将完成预期的行为。
public void itShouldSayHello() {
View view = new View();
Presenter presenter = new Presenter(view);
presenter.userSaid("hello");
assertTrue(view.getGreeting().equals("hello"));
}
然后,我认为该视图尚未接受测试,因此我创建了一个假视图。
private String greeting;
public void itShouldSayHello() {
View view = new FakeView();
Presenter presenter = new Presenter(view);
presenter.userSaid("hello");
assertTrue(greeting.equals("hello"));
}
private class FakeView implements View {
@Override
public void displayGreeting(String saluto) {
greeting = saluto;
}
}
然后我认为视图的界面可能会改变。这会使代码难以维护。因此,我编写了测试,并断言应该向视图提供某些内容。这样即使接口改变了,我也必须在测试中更改一行代码。
public void itShouldSayHello() {
View view = mock(View.class);
Presenter presenter = new Presenter(view);
presenter.userSaid("hello");
verify(view).displayGreeting("hello");
}
因此,基本上我现在要测试的是,我希望演示者收集并处理一些信息,最后将其传递给视图,然后验证传递的值是否正确。
因此,我想我现在不是在使用伪造的东西,而是在使用模拟,然后验证该模拟是否收到正确的值。
我的另一个问题是模型。但是我认为这是无法克服的。我要查看演示者是否行为正确,要做的是创建一个大型胖子固定装置。然后通过所有各种组合,看看演示者的行为是否正确。
您如何测试演示者?
您可以利用视图/演示者的分离来测试演示者。如果您已经完全实现了MVP,则View将实现一个接口,Presenter将使用该接口将数据返回给View。如果要测试MVP应用程序,则不仅要使Presenter正常运行,还希望View用来与Presenter通信的界面。
因此,您的测试类应实现View的界面,调用Presenter的方法,并存储来自Presenter的响应(来自覆盖该接口的本地方法)。如果您的Presenter与业务层同步通信,这会更容易:
如果您的Presenter异步通信,您将必须在测试方法中执行诸如wait等操作,并从接口方法中进行通知。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句