c# - 如何模拟 gremlin 服务器或创建内存图以进行单元测试?

标签 c# .net .net-core gremlin

我正在使用 Gremlin.Net,我想为查询数据库的函数编写单元测试。我希望查询在模拟数据上运行,以查看结果是否正确转换为我想要的格式,特别是对于具有 dynamic 类型的 Traverser.Object

有什么办法可以实现这个目标吗?也许在代码中运行服务器或拥有图形的内存实例。

这是一个玩具示例:

var query = graphTraversalSource.V(leafIds).As("leaf")
                .Emit(__.HasLabel("root"))
                .As("root")
                .Repeat(
                    __.InE("related_to").OtherV()
                    .SimplePath())
                .Dedup()
                .Select<Vertex>("leaf", "root")
                .By(__.ValueMap<string, string>(true));

var res = new List<MyFormat>();
foreach (var t in query.Traversers)
{
    var leafInfo = t.Object["leaf"];
    var rootInfo = t.Object["root"];

    var tmp = new MyFormat
    {
        LeafId = leafInfo[T.Id],
        LeafLabel = leafInfo[T.Label],
        LeafProperty = leafInfo["some_property"][0],
        RootId = rootInfo[T.Id],
        RootProperty = rootInfo["some_other_propert"][0]
    };

    res.Add(tmp);
}

return res;

在上面的示例中,leafInforootInfo 具有 dynamic 类型,因此针对测试图运行此函数可以断言这些变量正确使用,例如leafInfo["some_property"][0] 可分配给 MyFormat.LeafProperty

最佳答案

我不确定是否有一种在 .NET 应用程序中模拟 Gremlin Server 的好方法。我想您可以尝试编写 IRemoteConnection 的某种实现并将其提供为:

var g = Traversal().WithRemote(new MyRemoteConnection());

但这可能并不容易完成,具体取决于您希望测试的内容以及您希望如何进行测试。

我想说,.NET(和其他非 JVM 语言)开发人员经常将 Gremlin Server 与 Docker 结合使用。在单元测试开始之前启动它(如果可以的话,使用 TinkerGraph 进行快速但可能不是完美的测试)并在测试结束时将其关闭。我认为这不是经典意义上的真正的“单元测试”,但它有效并且可以很快。我们在 TinkerPop 本身的 .NET 以及其他 GLV 中使用的单元测试就采用了这种方法。我们与 Maven 集成,并将 Gremlin Server 配置为在其标准生命周期中启动/停止。该配置的主要部分可以找到 here .

如果我们能够更好地测试对 .NET 等 GLV 的支持,那就太好了,但当我读完这个答案时,我想知道您是否不能使用 IRemoteConnection 来实现一些巧妙的事情。也许如果有更好的测试支持,它会以某种方式从该界面中出来。

关于c# - 如何模拟 gremlin 服务器或创建内存图以进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60840508/

相关文章:

c# - 从控制台应用程序引用时,静态文件不适用于 AspNetCore Web 应用程序

c# - 对象与使用 C# 反射的目标类型不匹配

c# - 统一容器 : Register two singletones which implement two interfaces one of which is common

c# - Visual Studio 2008 奇怪的构建错误(类型与导入类型冲突)

c# - 我的 NuGet 包与 .NET Core 兼容吗?

c# - 如何在单独的线程上运行后台服务?

c# - 用于验证 URL 或域名的正则表达式。

c# - 正则表达式函数不适用于一个非法字符

c# - 调用 Imaging.CreateBitmapSourceFromHIcon 后可以安全地处理图标吗?

c# - 将预先存在的 AutoCAD 图形插入当前图形