草庐IT

c# - 使用 Moq 和 TDD,从哪里开始?

我有一个服务器应用程序,我想知道如果我想开始实现TDD和使用Moq,我应该从哪里开始。关于这个主题,我可以阅读哪些不太“面向网络”的好书?我对此事有疑问,例如:我应该模拟我想要测试的每个对象,还是只模拟那些我无法实现的对象,比如文本编写器?我的服务器需要大量设置才能真正执行我想测试的任何事情,我是否应该将其塞入[TestInitialize]函数?如果我想测试更深层次的功能,我应该如何链接我的测试? 最佳答案 您无需模拟要测试的对象。如果你这样做,你就是在测试模拟,而不是你的对象!您需要模拟正在测试的对象的依赖性。

c# - 如何使用 Moq 对 Entity Framework 6 中的删除操作进行单元测试

*更新编辑-部分解决方案-仍然需要帮助*-我发现异常只是误导。它给了我这个异常(exception),因为我得到了模拟属性被错误调用的次数。它应该被调用两次,而不是一次。那部分现在有效。但我仍然不明白为什么实体没有从列表中删除。是因为它是可查询的吗?下面是原始问题我一直在努力关注thislink学习如何单元实体框架6和6.1。但是它没有显示如何对删除操作进行单元测试。这里是我要测试的代码:publicvoidDeleteRequirement(intid){RequirementrequirementToDelete=GetRequirement(id);context.Require

c# - 使用 Moq 通过任意键和值设置任意

在问题的最后:UsingMoqtosetindexersinC#,有人强调了我也遇到的问题。但他们没有找到解决方案。具体来说,我正在尝试使用通用It.IsAny作为键的匹配器并通过It.IsAny设置值.当通过索引访问并设置值时,它从不匹配并且不访问我的回调方法。所以我的单元测试失败了。varstateTable=newHashTable;varhttpSession=newMock();//worksviahttpSession.Add(key,value);httpSession.Setup(x=>x.Add(It.IsAny(),It.IsAny())).Callback((st

c# - Moq Setup 不工作,原来的方法仍然被调用

当我尝试使用Moq时它仍然调用的原始方法。这是我的代码:varmockedBetRepository=newMock(newFakeSiteContext());mockedBetRepository.CallBase=true;Betbet=newBet();mockedBetRepository.Setup(m=>m.UpdateBet(bet)).Returns(bet);betRepository=mockedBetRepository.Object;稍后在代码中,调用了betRepository.UpdateBet(bet),但调用的不是我模拟的方法,而是类的方法:publi

c# - 如何使用 Moq 提供方法实现?

我有一个包含一些方法的接口(interface)。我有这个接口(interface)的默认实现。出于集成测试的目的,我想创建一个模拟实现,如果调用这些方法之一,它返回我的自定义值,否则回退到默认实现。是否可以使用Moq,还是我应该自己创建一个简单的stub?例子IInterfacedefault=newDefaultImplementation();varmock=newMock();mock.Setup(i=>i.Method(It.IsAny())).Calls(p=>p==0?return5:default.Method(p););TheMethodITest(mock.Obje

c# - Moq 中 SetupSet 和 SetupProperty 的区别

我知道SetupSet是在Moq中设置属性的旧方法。它现在已经过时了,但我的智能感知显示两者都没有标记为过时。谁能指出它们之间的实际区别? 最佳答案 我大概发现了一个不同之处,如下所示。如果您尝试模拟只读属性,则必须使用SetupGet,因为SetupProperty在这种情况下不起作用。而如果您想设置期望值,SetupProperty可用于非只读属性。例如,下面是行不通的publicinterfaceIXyz{intId{get;}}//TestSideCodevar_mock=newMock();_mock.SetupPrope

c# - 使用 Moq 模拟单元测试中的执行延迟

我正在尝试测试以下内容:protectedIHealthStatusVerifyMessage(ISubscriberdestination){varstatus=newHeartBeatStatus();vartask=newTask(()=>{Console.WriteLine("VerifyMessage(Start):{0}-{1}",DateTime.Now,WarningTimeout);Thread.Sleep(WarningTimeout-500);Console.WriteLine("VerifyMessage(Success):{0}",DateTime.Now);

c# - Moq - 验证具有参数值的方法调用

我正在尝试使用Moq测试调用具有“params”列表的方法,但由于某种原因,这失败了。方法签名是这样的:voidAttachAsModifiedToOrders(IOrderorder,paramsExpression>[]modifiedProperties);然后在Mock设置中我做了类似这样的事情来从模拟集合中做一个简单的“删除/插入”:MockEntities.Setup(n=>n.AttachAsModifiedToOrders(It.IsAny())).Callback>[]>((order,expr)=>{Orders.Remove(Orders.Where(o=>o.I

c# - 如何使用 Moq 修改模拟方法的调用参数?

是否可以修改模拟方法的调用参数?特别是我希望改变buffer在以下示例中为预填充的字节数组。例子:intMockedClass.Read(byte[]buffer,intoffset,intcount)解释:打电话Read负载count从offset读取的字节数到提供的字节数组buffer.现在我想在调用Read之后填充缓冲区已在我的应用程序代码中完成。这可能吗?如果是,我将如何连续调用Read?如果可能的话,我希望连续调用每次都返回不同的缓冲区。编辑:使用Setup像这样的命令:MockedClass.Setup(x=>x.Read(It.IsAny(),It.IsAny(),It.

c# - 在调用方法时使用 Moq 分配属性值

我正在尝试使用Moq在调用方法时分配属性。类似的东西:Mockmock=newMock();mock.Setup(x=>x.Start()).AssignProperty(y=>y.Enabled=true);是否可以在调用方法时使用Moq设置预期的属性值 最佳答案 我假设您实际上是在尝试在调用方法时在Mock上执行一个新的Setup()?如果是这样,您应该能够通过回调来完成此操作,如下所示:Mockmock=newMock();mock.Setup(x=>x.Start()).Callback(()=>mock.SetupGet(