调用方法时可以完成单元测试吗?

时间:2018-05-29 11:11:32

标签: unit-testing kotlin mvp

这是我的测试方法,如果调用 showLoading() loadDataSuccess(响应),它应该会成功:

 @RunWith(PowerMockRunner.class)
     public class PresenterTest {
            @Mock  
            private ProfileContract.View view;
            @Mock
            private ProfileContract.Handler handler;

            @Test
            public void onLoadDataClicked() {
              presenter.loadData();
              verify(mView, times(1)).showLoading();
              verify(mHandler, times(1)).loadDataSuccess();
            }
     }

更新1 这是我的主持人:

class ProfilePresenter(private val mView: ProfileContract.View) : ProfileContract.Handler {

     override fun loadData() {
            mView.showLoading()
            mUserService.user()
                    .compose(RxUtil.mapper())
                    .subscribe({ response ->
                        loadDataSuccess()
                    }, { error ->
                        //stuff
                    })
        }
}

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您使用return声明,则您的测试将以成功状态结束。

答案 1 :(得分:0)

我认为您的测试设置存在一个基本问题:

您不使用verify来检查一个函数是否在同一个类中调用另一个函数。 Verify用于验证测试类调用其他(模拟)类的函数。如果我没有弄错的话,你的设置实际上应该给你一条错误信息,告诉你不能在实例化的类上使用verify

如果要检查onCompleteClicked()是否产生正确的结果,您应该做什么 - 检查onStuffComplete()功能内部更改的数据是否设置正确。您可以使用assert

例如,我们可以说onStuffCompleted()completeCounter设置为1

@Test
public void onCompleteClicked() {
  presenter.onStuffCompleteClicked();
  assertEquals(completCounter , 1);
}

并回答您的原始问题:verify(和assert)将在满足要求时通过(并且整个测试将通过),否则将失败。您不需要添加任何其他内容(但是再次:verify仅适用于模拟的类)。