我正在使用 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;
在上面的示例中,leafInfo
和 rootInfo
具有 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/