如何UnitTest依赖于网络连接的Android服务

如何UnitTest依赖于网络连接的Android服务,第1张

概述我有一个Android服务,通过来回传递消息来处理与游戏同步服务器的通信.我希望能够对这项服务的行为进行单元测试.也就是说,当在线上看到数据时,读取,解析数据并发出有效的相应意图,并且当服务接收到Intent时,它正确地创建要发送到服务器的消息.我不是特别擅长单元测试,但我正在尝

我有一个Android服务,通过来回传递消息来处理与游戏同步服务器的通信.

我希望能够对这项服务的行为进行单元测试.也就是说,当在线上看到数据时,读取,解析数据并发出有效的相应意图,并且当服务接收到Intent时,它正确地创建要发送到服务器的消息.

我不是特别擅长单元测试,但我正在尝试将单元测试作为我练习的一部分.我不确定如何处理这样的事情.感觉就像某种程度上我需要模拟套接字并伪造输入和输出流,但我真的不知道如何做到这一点,特别是因为它适用于AndroID.

这是(大大减少了严重性)服务:

public class GameSyncService extends Service {    Thread minputThread = new Thread() {        /**         * Parse commands from a message string, broadcast the command intents, and         * return the remainder of the message         * @param message The message to parse for commands         * @returns the remaining characters         */        private String parseCommands(String message) {            // Parse the command, broadcast the Intent and return any remainder        }        @OverrIDe        public voID run() {            String message = "";            int charsRead = 0;            char [] buffer = new char[BUFFER_SIZE];            while(!Thread.interrupted()) {                try {                    while ((charsRead = mIn.read(buffer)) != -1) {                        message += new String(buffer).substring(0, charsRead);                        message = parseCommands(message);                    }                } catch (IOException e) {                    Log.d(LOG_TAG, "Error receiving response: " + e.getLocalizedMessage());                    disconnectFromServer();                    connectToServer();                }            }        }    };    private broadcastReceiver mMessageSender = new broadcastReceiver() {        @OverrIDe        public voID onReceive(Context context, Intent intent) {            String message = intent.getStringExtra("message");            sendMessage(message);        }    };    @OverrIDe    public IBinder onBind(Intent arg0) {        return null;    }    private voID sendMessage(String message) {        new SendCommandMessageTask().execute(message);    }    /**     * Create a new connection to the server     */    private voID connectToServer() {        try {            if (mSocket == null) {                mSocket = new Socket(mHost, mPort);                mOut = new PrintWriter(mSocket.getoutputStream());                mIn = new BufferedReader(new inputStreamReader(mSocket.getinputStream()), BUFFER_SIZE);                sendMessage("Handshake:|" + pInfo.versionname);            }        } catch (IOException e) {            e.printstacktrace();        }    }    /**     * disconnect from the server and reset the socket to null     */    private voID disconnectFromServer() {        if (mSocket != null) {            try {                mIn.close();                mOut.close();                mSocket.close();                mSocket = null;            } catch (IOException e) {                e.printstacktrace();            }        }    }    @OverrIDe    public int onStartCommand(Intent i, int flags, int startID) {        Log.d(LOG_TAG, "GameSyncService Started");        mHost = i.getStringExtra("host");        mPort = i.getIntExtra("port", 9000);        connectToServer();        minputThread.start();        return START_STICKY;    }    @OverrIDe    public voID onCreate() {        registerReceiver(mMessageSender, new IntentFilter(COMMAND_MESSAGE_SEND_ACTION));        try {            pInfo = getPackageManager().getPackageInfo(getPackagename(), 0);        } catch (nameNotFoundException e) {            e.printstacktrace();        }        super.onCreate();    }    @OverrIDe    public voID onDestroy() {        unregisterReceiver(mMessageSender);        super.onDestroy();    }}

解决方法:

欢迎来到嘲弄的世界.您需要做的事情可以在Android Mock的帮助下轻松完成.您应该在项目的Writing Tests using Android Mock维基页面上阅读Expectations如何与AndroID Mock一起使用.

我要做的是实现一个封装底层TCP /套接字调用的Socket服务.然后使用AndroID Mock,您可以模拟您的Socket服务并使用Expectations来验证是否通过更高级别的方法传递了正确的数据(如GameSyncService)

总结

以上是内存溢出为你收集整理的如何UnitTest依赖于网络连接的Android服务全部内容,希望文章能够帮你解决如何UnitTest依赖于网络连接的Android服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1118855.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存