创建一个Facebook.从字符串中获取JsonArray对象,用于测试

本文关键字:JsonArray 获取 对象 测试 用于 字符串 Facebook 一个 创建 | 更新日期: 2023-09-27 17:49:48

我在我的项目中使用Facebook c# SDK,出于测试目的,我希望能够剔除FacebookClient并插入我自己的假客户端,这将返回预定义的Facebook API调用响应(我只在我的应用程序中调用FacebookClient.Get方法)。使用工厂模式和可配置的StructureMap设置非常容易实现。

除了一件事…

我的假FacebookClient需要返回Facebook.JsonArray对象。

我一直在筛选SDK源代码,可以看到SimpleJson类可以用来创建JsonArray对象。然而,它被标记为内部的,除非我开始搞乱和重建SDK。

有更简单的方法吗?

创建一个Facebook.从字符串中获取JsonArray对象,用于测试

应该直接使用SimpleJson。你可以通过"SimpleJson"NuGet包或Github获得它。基本上,我们不希望人们使用Facebook c# SDK作为JSON序列化器-这就是为什么我们将您引用的方法标记为已弃用。

Github源码:https://github.com/facebook-csharp-sdk/simple-json

自己找到了答案;FacebookClient.DeserializeJson可以做到这一点,尽管它已被弃用。

var content = /* Previously obtained JSON string */;
var client = new Facebook.FacebookClient();
var result = client.DeserializeJson(content, null);

您也可以尝试使用Facebook.Moq进行测试。https://github.com/prabirshrestha/Facebook.Moq

安装包Facebook。Moq

var mockFb = FacebookMock.New();
mockFb
    .FbSetup()
    .ReturnsJson("{'"id'":'"4'",'"name'":'"Mark Zuckerberg'",'"first_name'":'"Mark'",'"last_name'":'"Zuckerberg'",'"link'":'"http:''/''/www.facebook.com''/zuck'",'"username'":'"zuck'",'"gender'":'"male'",'"locale'":'"en_US'"}");
var fb = mockFb.Object;
dynamic result = fb.Get("/4");
Assert.Equal("Mark Zuckerberg", result.name);