如何对需要Web服务调用的Android应用程序进行单元测试

时间:2016-03-11 10:44:31

标签: android unit-testing junit retrofit swagger

以下是我在项目中使用的工具和框架。

  1. 改造
  2. Dagger 2
  3. Swagger
  4. Swagger改装客户端生成器
  5. 我还在我的项目中实现了MVP设计模式。

      

    我只是想知道我是否需要使用真正的后端或者只是需要   模拟后端以进行测试。如果我需要嘲笑后端是什么   重新开始工具

         

    swagger提供任何模拟Web服务的工具

         

    主要是单元测试android(MVP)的最佳实践是什么?   演示

    我在这里发帖是因为我没有在网上找到所有这些问题的正确答案

    我为演示者编写了一个示例测试用例,如果我做错了请告诉我

    演示

     public void doLogin(String userName, String password) {
            loginView.showProgressBar(true);
            AuthenticationcontrollerApi authService = mDataClient.createService(AuthenticationcontrollerApi.class);
            UserCredentials userCredentials = new UserCredentials();
            userCredentials.setUserName(userName);
            userCredentials.setPassword(password);
            authService.authorizeUsingPOST(userCredentials, new Callback<String>() {
                @Override
                public void success(String s, Response response) {
                    loginView.showProgressBar(false);
                    loginView.onLoginSuccess(true, s);
                }
    
                @Override
                public void failure(RetrofitError error) {
                    loginView.showProgressBar(false);
                    loginView.onLoginFailure(error);
                }
            });
        }
    

    测试

    @RunWith(MockitoJUnitRunner.class)
    public class LoginPresenterTest {
    
        @Mock
        protected AuthenticationcontrollerApi authService;
    
        @Mock
        protected DataClient mDataClient;
    
        @Mock
        LoginView loginView;
    
    
        private LoginPresenter loginPresenter;
    
    
        @Before
        public void setUp() {
            loginPresenter = new LoginPresenter(mDataClient);
            loginPresenter.attachView(loginView);
            when(mDataClient.createService(AuthenticationcontrollerApi.class)).thenReturn(authService);
        }
    
        @Test
        public void loginSuccessful() {
            String a = "";
            loginPresenter.doLogin("abc", "abc");
            verify(loginView).showProgressBar(true);
        }
    
        @After
        public void detachView() {
            loginPresenter.detachView();
        }
    }
    

    提前致谢

1 个答案:

答案 0 :(得分:2)

单元测试应测试“单元”。这意味着所有依赖项应该由您明确控制(例如模拟)。

有集成测试可以测试不同部分的集成行为,但这是一个不同的主题。

让我们回答你的问题:

  

我只是想知道我是否需要使用真正的后端或者只是需要   模拟后端以进行测试。如果我需要嘲笑后端   什么是重新开始的工具

您不需要正在测试单元的真实后端。您不希望您的测试受到后端错误的影响。

Mockito是推荐的工具。你只是模仿行为(你在样本测试中开始做什么)。

  

swagger提供任何模拟Web服务的工具

除了Mockito,我认为你不需要任何特别的东西。

  

单元测试android(MVP)主要是演示者

的最佳实践是什么?

在演示者中,您可以模拟视图和数据源(在您的情况下是Web服务)并编写测试,为您的测试场景提供模拟数据。通过这种方式,您可以测试演示者的业务逻辑,而不是Web服务。