Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 检索一个";iClient=false";单元测试的EntityManager_Unit Testing_Devforce - Fatal编程技术网

Unit testing 检索一个";iClient=false";单元测试的EntityManager

Unit testing 检索一个";iClient=false";单元测试的EntityManager,unit-testing,devforce,Unit Testing,Devforce,我们希望对一些正在执行命名查询的服务器端组件执行单元测试,这些组件构造函数将接收EntityManager 我们的单元测试框架基于NUnit,我们正在非分布式模式下运行测试,以模拟2层部署。不幸的是,从单元测试代码创建EntityManager总是会产生一个“客户机”管理器,而我们需要一个“服务器”版本(即与服务器方法中的版本相同)。当我们获得客户机版本时,由于模型上的安全约束,我们正在测试的代码中的一些命名查询被拒绝 有没有一种很好的方法来检索EntityManager并以某种方式模拟单元测试

我们希望对一些正在执行命名查询的服务器端组件执行单元测试,这些组件构造函数将接收EntityManager

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

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


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

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

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

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