草庐IT

c# - 如何使用 Moq 从 Repository 中正确伪造 IQueryable<T>?

我有一个类在其构造函数中采用IRepository,如下所示......publicclassUserService{publicIRepository_repo{get;set;}publicUserService(IRepositoryrepo=null){_repo=repo??newUserRepository();}并且有一个看起来像这样的方法......publicboolIsUserActive(emailstring){//Themethodactuallydoesmorebuttokeepitsimpleletsimagine//itdoesthisUseruser=

c# - 使用 moq 验证对带有 param 参数的函数的调用

我有一个带有LogTrace(stringvalue,paramsobject[]parameters)的ILogger接口(interface)。现在我想验证是否调用了LogTrace并且要记录的字符串包含一些id。问题是它可以被不同地调用。例如。1)LogTrace("MyString"+id)2)LogTrace("MyString{0}",id)等等。Moq有没有好的方法来验证所有的场景?我只能考虑创建一个手工制作的模拟来格式化可用于验证的字符串。 最佳答案 mock.Verify(m=>m.LogTrace(It.IsAn

c# - 开始使用 Moq 和 Nunit 时遇到困难

我用头撞墙试图让一个非常简单的测试场景正常工作。我确定我错过了一些非常简单的东西!无论我做什么,在针对我的DLL运行测试时,我似乎都会从NUnitgui中得到以下错误:System.TypeLoadException:来自程序集“DynamicProxyGenAssembly2,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”的类型“CaSTLe.Proxies.ITestProxy”正试图实现一个不可访问的接口(interface)。现在,在查看StackOverflow和其他地方时,我已经在很多地方看到了对这个错误的引用,但我

c# - 每次使用 Moq 调用方法时,如何使 Mock 返回一个新列表

我正在使用MOQ模拟具有预期返回列表的方法调用。我的方法返回一个列表,但我希望模拟在每次调用该方法时创建一个新列表。到目前为止我做了什么:Listexpected=newList{newCorrelation(){Code="SelfError1"},newCorrelation(){Code="SelfError2"}};MockselfMock=newMock();selfMock.Setup(f=>f.Validate()).Returns(expected);我想要实现的是让模拟在每次调用方法get时返回一个新列表。我试过这个但没用:selfMock.Setup(f=>f.Va

c# - Moq:Lambda 表达式作为参数并在返回中评估它们

在我的单元测试中,我希望能够在接受lambda表达式的工作单元中最小化存储库的“查找”功能。例如:publicvirtualIQueryableFind(Expression>predicate){//FindOPS}我在我的单元测试中创建了测试列表来表示我的dbSet(我还省略了很多抽象以使这个问题更简单):[TestMethod]publicvoidFindTest(){varmockUnitOfWork=newMock();vartestList=newList{//Testvalues}//HereiswhereIamstuck:mockUnitOfWork.Setup(uow

c# - Moq 具有 5 个以上参数和访问调用参数的函数

我有一个功能我要最小起订量。问题是它需要5个参数。该框架仅包含Action和最小起订量的通用CallBack()仅重载Action和四个通用版本。有没有优雅的解决方法?这就是我想要做的:publicclassFilter:IFilter{publicintFilter(inti1,inti2,inti3,inti4,inti5){return0;}}//Moqcode:varmocker=newMock();mocker.Setup(x=>x.Filter(It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny(),It.IsAny()

c# - 如何安装 Moq 框架

我计划使用Moq在我创建的单元测试代码中模拟一些接口(interface)。我已经下载了最新版本的Moq。我的问题是如何安装它?我应该把Moq.dll放在哪里?我试过在Internet上搜索,但我能找到的都是如何使用Moq的示例,而不是如何安装它。 最佳答案 添加对Moq框架的引用的最佳方法是从Nuget安装它.你也可以downloadMoq.dll并添加对该库的引用(通常我在解决方案文件夹下创建文件夹libs,我将所有第三方库放在其中,这无法通过Nuget获得)。BTW从Nuget安装包的另一个选项-右键单击​​项目引用并选择Ma

c# - 如何使用 moq 框架在 c# 中为私有(private)方法编写单元测试?

我想使用moq框架在C#中为私有(private)方法编写单元测试,我在StackOverFlow和Google中进行了搜索,但找不到预期的结果。如果可以,请帮助我。 最佳答案 你不能,至少不能使用最小起订量。但更重要的是,您不应该。首先,您测试的不是方法,而是行为。其次,为了测试行为,您可以使用类型的公共(public)API并验证该操作的结果。私有(private)方法是实现细节。您不想验证如何完成事情,您想要验证做的事情是否完成。 关于c#-如何使用moq框架在c#中为私有(pri

c# - 使用 Moq 在 C# 中单元测试 protected 方法

我最近注意到,您可以使用Moq对抽象基类进行单元测试,而不是在测试中创建一个实现抽象基类的虚拟类。参见Howtousemoqtotestaconcretemethodinanabstractclass?例如。你可以这样做:publicabstractclassMyAbstractClass{publicvirtualvoidMyMethod(){//...}}[Test]publicvoidMyMethodTest(){//ArrangeMockmock=newMock(){CallBase=true};//Actmock.Object.MyMethod();//Assert//...

c# - 如何在使用 Moq 调用方法时引发事件?

我有一个这样的界面:publicinterfaceIMyInterface{eventEventHandlerTriggered;voidTrigger();}我的单元测试中有一个这样的模拟对象:privateMock_mockedObject=newMock();我想做这样的事情://pseudo-code_mockedObject.Setup(i=>i.Trigger()).Raise(i=>i.Triggered+=null,this,true);但是,返回的ISetup界面上似乎没有Raise可用。我该怎么做? 最佳答案 您