【问题标题】:How can I pass mock data through the API response [closed]如何通过 API 响应传递模拟数据 [关闭]
【发布时间】: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,谢谢先生 :)

标签: c# .net-core asp.net-core-webapi


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多