如何通过 API 响应传递模拟数据 [关闭]

Posted

技术标签:

【中文标题】如何通过 API 响应传递模拟数据 [关闭]【英文标题】:How can I pass mock data through the API response [closed] 【发布时间】:2021-12-19 13:45:11 【问题描述】:

在我的前端需要遵循 JSON 响应,


    "status": "000",
    "message": "",
    "validation": [],
    "data": 
        "TeacherGroup": [
                       
                "TeacherCode": "BP",
                "TeacherCount": "12",
                "img": "",
                "salary": "50000.00"
            ,
                       
                "TeacherCode": "FT",
                "TeacherCount": "5",
                "img": "",
                "salary": "165090.50"
            
        ]

    

出于测试目的,我需要根据创建此 JSON 响应来制作模拟数据。我根据这个 JSON 创建了如下的类。

public class TeacherGroup

    public string TeacherCode  get; set; 
    public string TeacherCount  get; set; 
    public string img  get; set; 
    public string salary  get; set; 


public class Data

    public List<TeacherGroup> TeacherGroup  get; set; 


public class TeacherGroupData

    public string status  get; set; 
    public string message  get; set; 
    public List<object> validation  get; set; 
    public Data data  get; set; 

怎么办,我试过这种方式设置mock数据,

public IEnumerable<TeacherGroupData> GetAllGroups()

    var groups = new List<TeacherGroupData>()
    
        new TeacherGroupData status = "000" , message = "" , validation = null 
        
        // how can I set values to data > TeacherGroup
    ;

    return groups;

这是正确的方法吗?如果是,我如何为数据和教师组设置模拟值?

【问题讨论】:

看起来您已经为对象的三个属性设置了值。是什么阻止您为第四个属性设置值?基本上只是将data = new Data 添加到您的对象初始化程序中?并根据需要在new Data 中进一步添加属性初始化器?我想我不清楚这里的问题是什么,为什么你不能继续使用你已经开始编写的代码? @David Sir,我只是想验证一下,这是设置模拟数据以获得响应的正确方法吗? 在这种情况下,答案很简单:“是的,这是从 API 返回模拟数据的一种正确方法”。虽然您也可以通过运行和测试代码来验证这一点。 @David Cool,谢谢先生 :) 【参考方案1】:

除非您对模拟数据有一些要求,否则您可以使用此示例代码:

public static TeacherGroupData GetMockData(int teachersGroupCount)

    var teacherGroup = new TeacherGroup[teachersGroupCount];
    for (int i = 0; i < teachersGroupCount; i++)
        teacherGroup[i] = new TeacherGroup()
        
            TeacherCode= Guid.NewGuid().ToString(),
            TeacherCount = Guid.NewGuid().ToString(),
            salary = Guid.NewGuid().ToString(),
            img = Guid.NewGuid().ToString(),
        ;

    var mockData = new TeacherGroupData()
    
        status = Guid.NewGuid().ToString(),
        message = Guid.NewGuid().ToString(),
        validation = new List<object>(),
        data = new Data()  TeacherGroup = teacherGroup.ToList() ,
    ;

    return mockData;

好吧,出于测试目的(单元测试),这里也可以使用 AutoFixture 库(通常在单元测试中使用它,但您也有类似的情况)。这大大简化了代码:

public static TeacherGroupData GetMockData(int teachersGroupCount)

    var data = new Data()
    
        TeacherGroup = new Fixture().CreateMany<TeacherGroup>(teachersGroupCount).ToList(),
    ;

    var mockData = new Fixture().Create<TeacherGroupData>();
    mockData.data = data;

    return mockData;

【讨论】:

【参考方案2】:

我知道这不是测试安全,但您可以使用 json.net 将 json 反序列化为对象

https://www.newtonsoft.com/json/help/html/deserializeobject.htm

string testDataJson = @"
  
    "status": "000",
    "message": "",
    "validation": [],
   .......
";

var teacherGroupData = JsonConvert.DeserializeObject<TeacherGroupData>(testDataJson);

【讨论】:

以上是关于如何通过 API 响应传递模拟数据 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过简单的模拟模型生成人工数据集,用于具有二元响应和 4-5 特征的分类分析? [关闭]

模拟API响应javascript / react

通过 jmeter 模拟并行端点 api 使用

模拟 API 响应时如何在单元测试中使用 JSON 文件

在模拟API响应时,如何在单元测试中使用JSON文件

如何自动生成用于改装响应的模拟数据对象?