首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试DevForce EntityManager.InvokeServerMethod

单元测试DevForce EntityManager.InvokeServerMethod
EN

Stack Overflow用户
提问于 2018-04-19 18:59:54
回答 1查看 47关注 0票数 1

在WPF应用程序中,我有一个视图模型,它使用DevForce实体管理器InvokeServerMethod调用从服务器检索数据。我想通过视图模型进行单元测试。

使用Moq,我模拟了IEntityManagerProvider并设置了InvokeServerMethod

代码语言:javascript
复制
var mockManager = new Mock<MyEntities>(MockBehavior.Loose, false, null, 
    EntityServiceOption.UseDefaultService, "Fake");

var mockProvider = new Mock<IEntityManagerProvider<MyEntities>>(MockBehaviour.Loose);

mockProvider.Setup(m => m.Manager).Returns(mockManager.Object);

mockManager
    .Setup(m => m.InvokeServerMethod(It.IsAny<ServerMethodDelegate>())
    .Returns(new List<int>());

但当我做测试的时候

“非虚拟成员上的设置无效”。

接下来,我进入了我的IEntityManagerProvider接口并创建了这个方法

代码语言:javascript
复制
object MockableServerMethod(ServerMethodDelegate method, params object[] 
    parameters); 

然后我实现了这个新方法

代码语言:javascript
复制
public object MockableServerMethod(ServerMethodDelegate method, params 
    object[] parameters)
{
    return Manager.InvokeServerMethod(method, params);
}

这允许我模拟服务器调用,但需要我更改生产代码,这是我不应该做的。

当被测试的方法调用InvokeServerMethod()时,编写单元测试的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-04-20 13:06:46

我想出了一个更干净的解决方案,尽管它仍然需要修改生产代码。

MyEntities是一个从IdeaBlade.EntityModel.EntityManager继承的部分类。因此,我能够将以下代码添加到MyEntities中

代码语言:javascript
复制
public virtual async Task<object>ExecuteServerMethodAsync(
    ServerMethodDelegate method, params object[] parameters)
{
    return await InvokeServerMethodAsync(method, parameters);
}

现在,我的生产代码调用执行..。而不是调用..。执行方法是可模拟的。

戴夫

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49928385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档