easymock为例进行测试。(之前一直使用的是 fastmock,但fastmock要离我们而去了.)

所以此次用easymock来测试。

EasyMock 是一个用于 Java 单元测试的模拟(Mock)框架,能够通过简单的方法为给定的接口或类生成 Mock 对象。 ​它允许开发者在测试中模拟复杂的依赖关系,使测试过程更加简洁、独立。 ​

使用 EasyMock 的基本步骤包括:

  1. 创建 Mock 对象:​使用 EasyMock.createMock() 方法为要模拟的接口或类生成 Mock 对象。​

  2. 设定 Mock 对象的预期行为和输出:​在测试中,定义当 Mock 对象的方法被调用时应返回的值或抛出的异常。​

  3. 将 Mock 对象切换到 Replay 状态:​通过调用 EasyMock.replay() 方法,将 Mock 对象切换到 Replay 状态,以便在测试中使用。

  4. 调用 Mock 对象方法进行单元测试:​在测试中调用被测方法,Mock 对象将按照预先设定的行为响应。

  5. 对 Mock 对象的行为进行验证:​使用 EasyMock.verify() 方法,检查 Mock 对象的预期方法是否被正确调用。​通过以上步骤,EasyMock 能够有效地模拟对象行为,帮助开发者在单元测试中隔离待测代码与其依赖的其他组件。 百度智能云+3CSDN博客+3百度智能云+3

 进入easymock后,新建一个项目。

URL随便写,这个不重要,主要用于分类。选择一下Method类型,添加一下描述信息 。

我的测试数据如下:

现在我需要在Unity中,给我的Canvas添加一个天气,使其每次启动的时候读取一次服务器端的天气信息进行更新。先上代码,完整代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static NewBehaviourScript;
using UnityEngine.Networking;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour
{
    public Text weather;

    // 用来接收天气数据的类实例
    WeatherData weatherData = new WeatherData();
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(getWeatherData());
    }

    // Update is called once per frame
    void Update()
    {
        
    }


    [System.Serializable]
    public class WeatherData
    {
        public string wendu;     // 温度
        public string shidu;     // 湿度
        public string tianqi;    // 天气状况
        public string fengxiang; // 风向
    }

    // ---------- 解析Json数据的协程 ----------
    IEnumerator getWeatherData()
    {
        // 指定远程请求的URL,这里是FastMock的一个测试链接
        string url = "https://mock.presstime.cn/mock/67d8da61bbeaf93de4b683ec/example/myapi/weather";

        // 使用UnityWebRequest进行GET请求
        using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(url))
        {
            // 等待请求响应
            yield return unityWebRequest.SendWebRequest();

            // 判断请求是否出现连接错误
            if (unityWebRequest.result == UnityWebRequest.Result.ConnectionError)
            {
                Debug.Log("连接失败");
                Debug.Log(unityWebRequest.error);
            }
            else
            {
                // 解析Json,将返回数据映射到 WeatherData 对象中
                weatherData = JsonUtility.FromJson<WeatherData>(unityWebRequest.downloadHandler.text);

                // 更新UI文本,将获取的天气信息显示出来
                weather.text = "天气:" + weatherData.tianqi
                             + " 湿度:" + weatherData.shidu
                + " 温度:" + weatherData.wendu
                             + " 风向:" + weatherData.fengxiang;
            }
        }
    }
}

 首先,我先定义了一个 天气 类,包含了 天气、湿度、温度 和 风向信息。注意:此处的    [System.Serializable] 一定要加上,否则会解析Json数据失败。

    [System.Serializable]
    public class WeatherData
    {
        public string wendu;     // 温度
        public string shidu;     // 湿度
        public string tianqi;    // 天气状况
        public string fengxiang; // 风向
    }

getWeatherData方法的模块比较固定,string url中的 url 即直接从 easymock 中复制即可,在这个地方。

拿到后就可读取 数据库中的信息,并以 WeatherData 类的形式返回。

最后我要在Unity上显示的数据为:

weather.text = "天气:" + weatherData.tianqi+ " 湿度:" + weatherData.shidu+ " 温度:" + weatherData.wendu+ " 风向:" + weatherData.fengxiang;

运行一下试试,结果如下:

运行前:

运行后:

 

仅此而已。同理,实际项目中,前端通过阿里云等服务器去获取数据的形式也是类似如此,均通过读取API的形式去获取。少数情况下会用到直连数据库的形式(MySQL),因为直连需要输入数据库的 账号 和 密码,会直接暴露数据库安全。如果你对连接数据库有兴趣可以看另一篇文章:(二)BIM-Unity 搭建数字孪生-Unity 连接 MySQL_unity 连接 mysql工具-CSDN博客

至此,完成了一个简单的天气数据获取测试,在实际应用中,主要用于如智慧园区、智慧工地大屏的左上角或图表实时数据的读取,当然实时数据主要来源于现场,这涉及到物联网开发,有时间我会在写一个,如何从现场读取数据到后端的测试。

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐