草庐IT

c# - 使用 Moq 实现 IQueryable 的模拟类

我花了一个晚上试图模拟一个实现了IQueryable的对象:publicinterfaceIRepo:IQueryable{}我能想到的最好的是这样的:varitems=newItem[]{}.AsQueryable();varrepo=newMock();repo.Setup(r=>r.GetEnumerator()).Returns(items.GetEnumerator());repo.Setup(r=>r.Provider).Returns(items.Provider);repo.Setup(r=>r.ElementType).Returns(items.ElementTyp

c# - Moq伪造一种方法但使用另一种方法的真实实现

给定一个接口(interface)IService,它有Method1()和Method2()。我想测试当Method1()抛出一个Exception时,Method2()被调用并返回一个给定的值.(Method2()在Method1()抛出时调用)。因此我需要用一个假的Method1()来测试一个真正的Method2(),它们是同一个接口(interface)的方法。这是我的测试代码:MBasesut.MethodX()是唯一的入口点。它使用IService。我的目标是断言Method2()返回东西。//Arrange//Fakebytesin.varnetworkStreamMoc

c# - Moq ReturnsAsync() 带参数

我正在尝试像那样模拟存储库的方法publicasyncTaskGetByTypeValue(WhitelistTypetype,stringvalue)使用MoqReturnsAsync,如下所示:staticListwhitelist=newList();varwhitelistRepositoryMock=newMock();whitelistRepositoryMock.Setup(w=>w.GetByTypeValue(It.IsAny(),It.IsAny())).ReturnsAsync((WhitelistTypetype,stringvalue)=>{return(fr

c# - Moq:单元测试依赖于 HttpContext 的方法

考虑.NET程序集中的一个方法:publicstaticstringGetSecurityContextUserName(){//extracttheusernamefromrequeststringsUser=HttpContext.Current.User.Identity.Name;//everythingafterthedomainsUser=sUser.Substring(sUser.IndexOf("\\")+1).ToLower();returnsUser;}我想使用Moq框架从单元测试中调用此方法。该程序集是webforms解决方案的一部分。单元测试看起来像这样,但我缺

c# - 如何使用 Moq 为不同的参数设置方法两次

我想用Moq设置一个方法两次,但似乎最后一个覆盖了之前的方法。这是我的初始设置:stringusername="foo";stringpassword="bar";varprincipal=newGenericPrincipal(newGenericIdentity(username),new[]{"Admin"});varmembershipServiceMock=newMock();membershipServiceMock.Setup(ms=>ms.ValidateUser(username,password)).Returns(newValidUserContext{Princ

c# - 我能否使用 Moq 来验证是否使用复杂参数中的特定值调用了模拟方法?

假设我正在模拟以下类:publicclassClassAParams{publicintRequestedId{get;set;}publicstringSomeValue{get;set;}}publicclassClassA{publicvoidExecuteAction(ClassAParamsexecuteParams){}}现在假设我有另一个类(我们称它为ClassB),我正在为其创建单元测试,我想确保当ClassB.Execute()被调用,ClassB调用ClassA.ExecuteAction()但我想确保它调用该方法的参数具有ClassAParams.Requeste

c# - 使用 Moq 调用原始方法

我有一个包含2个方法的ProductRepository,GetAllProducts和GetProductByType,我想测试GetProductByType的逻辑。在内部,GetProductByType调用GetAllProducts,然后过滤正确的产品。publicvirtualIEnumerableGetAllProducts(){//returnsallproductsinmemory,dbetc}publicvirtualIEnumerableGetProductsByType(stringtype){return(frompinGetAllProducts()wher

c# - 模拟一个抛出异常(moq)的方法,但在其他方面表现得像被模拟的对象?

我有一个Transfer类,简化后如下所示:publicclassTransfer{publicvirtualIFileConnectionsource{get;set;}publicvirtualIFileConnectiondestination{get;set;}publicvirtualvoidGetFile(IFileConnectionconnection,stringremoteFilename,stringlocalFilename){connection.Get(remoteFilename,localFilename);}publicvirtualvoidPutFi

c# - 如何使用 MOQ 框架在 c# 中模拟静态方法?

我最近一直在做单元测试,我已经成功地使用MOQ框架和MS测试模拟了各种场景。我知道我们无法测试私有(private)方法,但我想知道我们是否可以使用MOQ模拟静态方法。 最佳答案 Moq(和其他基于DynamicProxy的模拟框架)无法模拟任何不是虚拟或抽象方法的东西。密封/静态类/方法只能使用基于ProfilerAPI的工具伪造,例如Typemock(商业)或MicrosoftMoles(免费,在VisualStudio2012Ultimate/2013/2015中称为Fakes)。或者,您可以重构您的设计以抽象调用静态方法,并

c# - 如何使用 Moq 模拟扩展方法?

我正在编写一个依赖于扩展方法结果的测试,但我不希望该扩展方法的future失败永远破坏这个测试。模拟该结果似乎是显而易见的选择,但Moq似乎没有提供覆盖静态方法的方法(扩展方法的要求)。Moq.Protected和Moq.Stub也有类似的想法,但它们似乎没有为这种情况提供任何东西。我是否遗漏了什么或者我应该以不同的方式解决这个问题?这是一个简单的示例,它失败并出现通常的“对不可覆盖成员的无效期望”。这是一个需要模拟扩展方法的坏例子,但它应该这样做。publicclassSomeType{intId{get;set;}}varListMock=newMock>();ListMock.E