如何在Android单元测试中测试asyc改装调用?

时间:2015-08-31 14:49:21

标签: android unit-testing asynchronous junit retrofit

我正在努力为Android中的API实现编写单元测试。我想测试Retrofit功能,但遇到并发问题,在开始测试Android内部数据库调用之前,我不知道如何确保异步API调用得到执行并完成。

这是我的测试功能:

public class postPrintModeTest extends ActivityInstrumentationTestCase2<MainActivity> implements IConstants {
public MainActivity activity;

public postPrintModeTest() {
    super(MainActivity.class);
}

@Override
protected void setUp() throws Exception {
    super.setUp();
    activity = getActivity();

    String printModeName = "LSD Mode";
    int parentId = 4;
    Map<String, Object> payload = new HashMap<String, Object>();
    payload.put("name", printModeName);
    payload.put("parentId", parentId);

    APIExec.getInstance().postPrintMode(IConstants.authorization, IConstants.userId, IConstants.deviceUid, payload); // <- this needs to finish before I execute the tests, so I have proper data in the database.
}

@SmallTest
public void testPrintModeCreated() {
    DBPrintMode printMode = APIDBOps.getInstance().readPrintModeByPrintModeID(6);

    assertNotNull("Print Mode does not exist", printMode);
}

@SmallTest
public void testPrintModeName() {
    DBPrintMode printMode = APIDBOps.getInstance().readPrintModeByPrintModeID(6);

    if(printMode != null)
    {
        assertTrue("Print Mode name is not correct", printMode.getName().equals("LSD Mode"));
    }
}

}

以下是有问题的异步方法:

public void postPrintMode(String authorization, final int userid, String deviceuid, final Map payload){
    api.postPrintMode(authorization, userid, deviceuid, payload, new Callback<PrintMode>() {

        @Override
        public void success(PrintMode printMode, Response response) {

            if (printMode.get_id() != 0) {
                dbOps.writePrintMode(userid, printMode);
                bus.getBus().post(new EVTNewPrintMode(printMode));
            }
        }

        @Override
        public void failure(RetrofitError retrofitError) {
            retrofitError.printStackTrace();
            APIUtils.showAPIResponseBody(retrofitError);
        }
    });
}

0 个答案:

没有答案