【问题标题】:Retrieve a "IsClient=false" EntityManager for unit testing检索“IsClient=false”EntityManager 进行单元测试
【发布时间】:2016-11-17 07:56:30
【问题描述】:

我们想对一些执行命名查询的服务器端组件进行单元测试,这些组件的构造函数接收一个 EntityManager。

我们的单元测试框架基于 NUnit,我们在非分布式模式下运行测试以模拟 2 层部署。不幸的是,从单元测试代码创建 EntityManager 总是会产生一个“客户端”管理器,而我们需要一个“服务器”版本(即,与您在服务器方法中获得的相同)。当我们获得客户端版本时,由于模型的安全限制,我们正在测试的代码中的一些命名查询被拒绝。

有没有一种好方法可以检索 EntityManager 并以某种方式在单元测试端模拟服务器行为?到目前为止,我最好的方法是调用一个专用的服务器方法,将 EntityServer 存储在全局变量中的某个位置,并从单元测试中使用它。

问候

【问题讨论】:

    标签: unit-testing devforce


    【解决方案1】:

    正如您所发现的,DF 对单元测试不是特别友好,您使用的方法是一种很好的解决方法。

    无论实际部署如何,都将始终调用(如果找到)DevForce“服务器端”组件,例如 IEntityLoginManager、EntityServerQueryInterceptors 等。所以即使在运行 2 层单元测试时 DF 将启动内存中的 EntityServer 并查找服务器端组件,以完成来自 EntityManager 的请求。

    如果您遇到 ClientCanQuery 授权检查问题,这意味着默认的 EntityServerQueryInterceptor 授权逻辑正在启动。您可以使用 DevForce 的“组合上下文”功能实现自定义拦截器以进行测试。使用自定义测试拦截器,您可以覆盖默认授权逻辑以允许这些查询运行。有一些关于使用组合上下文进行测试的信息here

    或者,如果您想扩展“单元”测试的含义,并且由于无论如何都会调用服务器端组件,您可以编写简单的客户端单元测试来触发您要测试的特定服务器端逻辑. 例如,在客户端调用的简单命名查询将导致命名查询提供程序和/或查询拦截器中的特定逻辑运行,并且测试可以验证结果。

    【讨论】:

      猜你喜欢
      • 2020-05-15
      • 1970-01-01
      • 2019-08-02
      • 2023-04-11
      • 1970-01-01
      • 2012-01-08
      • 2018-07-14
      • 2021-08-31
      • 2022-01-03
      相关资源
      最近更新 更多