繁体   English   中英

android junit取决于登录凭据

[英]android junit depend on login credential

我使用Android-Junit4Android Studio上运行单元测试。 一些api请求需要依赖于登录状态( Clerk )。 我试图从setup方法中获取状态,但是失败了。

@RunWith (UnitTestGradleTestRunner.class)
@Config (constants = BuildConfig.class)
public abstract class ApiTest {

protected HashMap<HBApiBaseTask, ApiResponseTest> map = new HashMap<> ();

protected synchronized void add (HBApiBaseTask request, ApiResponseTest response) {
    map.put (request, response);
}

protected synchronized void remove (HBApiBaseTask request) {
    map.remove (request);
}

protected synchronized void runApiNow () {
    if (map.size () == 0) return;
    for (Map.Entry<HBApiBaseTask, ApiResponseTest> entry : map.entrySet ()) {
        final HBApiBaseTask requestTest = entry.getKey ();
        final ApiResponseTest responseTest = entry.getValue ();
        assertNotNull (requestTest);
        assertNotNull (responseTest);
        ApiTaskDelegate.getInstance ().run (requestTest, new TaskHost<InnerNetworkResponse> () {
            @Override
            public void onPostExecute (int requestCode, InnerNetworkResponse innerNetworkResponse) {
                super.onPostExecute (requestCode, innerNetworkResponse);

                assertNotNull (innerNetworkResponse);
                assertNotNull (responseTest);
                responseTest.onResponse (requestCode, innerNetworkResponse);

                switch (innerNetworkResponse.getStatusCode ()) {
                    case IStatusCode.CODE_SUCCESS:
                        JSONObject json = innerNetworkResponse.getResponse ();
                        assertNotNull (json);
                        if (responseTest instanceof ApiResponseWithParserCheckTest) {
                            if (json != null) {
                                ((ApiResponseWithParserCheckTest) responseTest).checkPOJO (innerNetworkResponse);
                            }
                        }
                        break;
                    default:
                        break;

                }
            }
        }, true);
    }
    map.clear ();
}

}

测试用例

@RunWith (UnitTestGradleTestRunner.class)
@Config (constants = BuildConfig.class)
public class SendCodeTaskTest extends ApiTest {

private Clerk clerk;

@Before
public void setup () {
    clerk = loginAsync ();
}

public Clerk loginAsync () {
    final Clerk clerk = new Clerk ();
    final CountDownLatch latch = new CountDownLatch (1);
    final Credential credential = new Credential ();
    credential.setAccount ("account");
    credential.setPassword ("password");
    add (new LoginTask (credential), new ApiResponseWithParserCheckTest () {
        @Override
        public void checkPOJO (InnerNetworkResponse response) {

            assertEquals (response.getStatusCode (), IStatusCode.CODE_SUCCESS);

            assertNotNull (response);
            final JSONObject json = response.getResponse ();
            assertNotNull (json);

            JSONObject model = JSONParseUtil.getModel (json);
            assertNotNull (model);
            credential.parse (model);
            assertNotNull (clerk);

            clerk.setCredential (credential);

        }

        @Override
        public void onResponse (int requestCode, InnerNetworkResponse innerNetworkResponse) {
            switch (innerNetworkResponse.getStatusCode ()) {
                case IStatusCode.CODE_SUCCESS:
                    assertTrue (true);
                    break;
                default:
                    assertTrue (false);
            }
            latch.countDown ();
        }
    });
    runApiNow ();
    try {
        latch.await ();
    } catch (InterruptedException e) {
        e.printStackTrace ();
    }
    assertNotNull (clerk);
    return clerk;
    }
}

错误日志:

java.net.SocketTimeoutException: timeout
at okio.Okio$3.newTimeoutException(Okio.java:207)
at okio.AsyncTimeout.exit(AsyncTimeout.java:261)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:215)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
at okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191)
at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:906)
at com.squareup.okhttp.internal.http.HttpEngine.access$300(HttpEngine.java:92)
at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:891)
at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:749)
at com.squareup.okhttp.Call.getResponse(Call.java:268)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
at com.squareup.okhttp.Call.execute(Call.java:79)

现在有了更好的解决方案,我将中间件的API分离出来,因此可以单独测试该API。

测试代码如下:

   @Test
    public void test_checkVerifyCode() {
        getResources().globalResources().checkVerifyCode("18268810820", 
                                                          "clerk", "1234");
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM