Questions tagged «moq»

Moq是用于.NET的强类型和简约模拟框架。

5
如何使用Entity Framework Core模拟异步存储库
我正在尝试为调用异步存储库的类创建一个单元测试。我正在使用ASP.NET Core和Entity Framework Core。我的通用存储库如下所示。 public class EntityRepository<TEntity> : IEntityRepository<TEntity> where TEntity : class { private readonly SaasDispatcherDbContext _dbContext; private readonly DbSet<TEntity> _dbSet; public EntityRepository(SaasDispatcherDbContext dbContext) { _dbContext = dbContext; _dbSet = dbContext.Set<TEntity>(); } public virtual IQueryable<TEntity> GetAll() { return _dbSet; } public virtual async Task<TEntity> FindByIdAsync(int id) { return await …

4
多个Moq It.Is <string>()匹配参数
使用Moq,拥有多个匹配参数是否有效? It.Is&lt;string&gt;() 在此示例中,我希望mockMembershipService返回一个不同的ProviderUserKey,具体取决于提供的用户。 mockMembershipService.Setup( x =&gt; x.GetUser( It.Is&lt;string&gt;( s =&gt; s.Contains("Joe"))) .ProviderUserKey) .Returns("1234abcd"); mockMembershipService.Setup( x =&gt; x.GetUser( It.Is&lt;string&gt;( s =&gt; s.Contains("Tracy"))) .ProviderUserKey) .Returns("5678efgh"); SetUp默认为第二条语句,而不是根据各自的价值进行评估。
76 c#  unit-testing  mocking  moq 

2
moq objects返回方法,应返回一个空对象
我正在开发Web API,我想出的一项测试是,如果客户端使用物理测试ID(物理测试是我正在寻找的资源)进行GET操作,但找不到该物理测试,则Web API应该返回404状态。 现在,我正在使用moq框架进行测试,并且具有以下代码: [TestMethod] public void then_if_physical_test_not_found_return_not_found_status() { var unitOfWork = new Mock&lt;IUnitOfWork&gt;(); var repository = new Mock&lt;IRepository&lt;PhysicalTest&gt;&gt;(); repository.Setup(r =&gt; r.FindById(It.IsAny&lt;int&gt;())).Returns(); unitOfWork.Setup(m =&gt; m.PhysicalTests).Returns(repository.Object); var pt = new PhysicalTestResource(unitOfWork.Object); HttpResponseMessage&lt;PhysicalTest&gt; response = pt.GetPhysicalTest(43); Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode) } 我需要Return()方法来返回一个空对象,这将是如果找不到资源则实际API方法将返回的对象。 我尝试在Return()方法中将null作为参数发送,但没有成功。

1
MOQ-如何模拟需要转换为另一个接口的接口?
我想做的是为I1构造一个最小起订量-很好...但是,在我测试的使用此模拟程序的方法的过程中,我需要将其强制转换为I2才能访问某些未启用的属性I1 Interface I1 { int AProperty{get;set;}} Interface I2 {int AnotherProperty{get;set;}} 然后我有一些东西 Class O1 : I1 {} 和 Class O2 : O1 , I2 {} 问题是,当我拥有I2实现对象的实例时,可以将其强制转换为I1以便访问通过该接口实现的方法。在代码中这不是问题,一切都能按预期进行。 唯一的问题是在该类上编写单元测试时。 这些接口还公开了一个名为GetNewInstance的方法,该方法返回转换为IGetNewInstance接口的实现对象的初始化实例……我通常可以对此进行模拟并使其自身返回(因此我继续使用模拟对象)。 但是,当您尝试将此类型为I2的返回对象转换为I1时,将返回空引用-这很有意义,因为实现I2的模拟对象不会继承任何继承I1的对象。 问题是如何强制模拟对象同时从两个I1和Id继承?

3
使用最小起订量仅模拟某些方法
我有以下方法: public CustomObect MyMethod() { var lUser = GetCurrentUser(); if (lUser.HaveAccess) { //One behavior } else { //Other behavior } //return CustomObject } 我想模拟IMyInterface.GetCurrentUser,以便在调用时MyMethod可以转到其中一个代码路径进行检查。Moq怎么做? 我正在做以下事情: var moq = new Mock&lt;IMyInterface&gt;(); moq.Setup(x =&gt; x.GetCurrentUser()).Returns(lUnauthorizedUser); //act var lResult = moq.Object.MyMethod(); 但是由于某些原因lResult,总是如此null,当我尝试进入MyMethod调试程序时,我总是跳到下一条语句。
75 moq 

6
用Moq模拟EF DbContext
我正在尝试使用模拟的DbContext为我的服务创建单元测试。我创建了一个IDbContext具有以下功能的接口: public interface IDbContext : IDisposable { IDbSet&lt;T&gt; Set&lt;T&gt;() where T : class; DbEntityEntry&lt;T&gt; Entry&lt;T&gt;(T entity) where T : class; int SaveChanges(); } 我的真实上下文实现了此接口IDbContext和DbContext。 现在,我尝试IDbSet&lt;T&gt;在上下文中模拟,因此它返回一个List&lt;User&gt;。 [TestMethod] public void TestGetAllUsers() { // Arrange var mock = new Mock&lt;IDbContext&gt;(); mock.Setup(x =&gt; x.Set&lt;User&gt;()) .Returns(new List&lt;User&gt; { new User { ID = 1 } …

6
模拟静态方法
最近,我开始使用Moq进行单元测试。我使用Moq来模拟不需要测试的类。 您通常如何处理静态方法? public void foo(string filePath) { File f = StaticClass.GetFile(filePath); } 怎么会StaticClass.GetFile()嘲笑这个静态方法? 附言:对于您建议的最小起订量和单元测试,我将不胜感激。
73 c#  unit-testing  mocking  moq 

4
Moq +单元测试-System.Reflection.TargetParameterCountException:参数计数不匹配
我试图使用带有多参数函数的lambda,但是当我尝试调用该行时,Moq在运行时抛出此异常mock.Object.Convert(value, null, null, null);。 System.Reflection.TargetParameterCountException:参数计数不匹配 代码是: var mock = new Mock&lt;IValueConverter&gt;(); mock.Setup(conv =&gt; conv.Convert(It.IsAny&lt;Object&gt;(), It.IsAny&lt;Type&gt;(), It.IsAny&lt;Object&gt;(), It.IsAny&lt;CultureInfo&gt;())).Returns((Int32 num) =&gt; num + 5); var value = 5; var expected = 10; var actual = mock.Object.Convert(value, null, null, null); 实施它的正确方法是什么?

7
模拟Asp.net-mvc控制器上下文
因此,控制器上下文取决于一些asp.net内部。有什么方法可以完全模拟这些以进行单元测试?当我只需要,例如Request.HttpMethod返回“ GET”时,似乎很容易用大量设置阻塞测试。 我已经在网上看到了一些例子/帮助者,但其中有些是过时的。认为这将是保持最新和最佳状态的好地方。 我正在使用最新版本的犀牛模拟

2
在Moq Callback()调用中设置变量值
我想我可能对Moq回调方法的语法有些困惑。当我尝试做这样的事情: IFilter filter = new Filter(); List&lt;IFoo&gt; objects = new List&lt;IFoo&gt; { new Foo(), new Foo() }; IQueryable myFilteredFoos = null; mockObject.Setup(m =&gt; m.GetByFilter(It.IsAny&lt;IFilter&gt;())) .Callback( (IFilter filter) =&gt; myFilteredFoos = filter.FilterCollection(objects)) .Returns(myFilteredFoos.Cast&lt;IFooBar&gt;()); 抛出异常,因为myFilteredFoos在Cast&lt;IFooBar&gt;()调用期间为null 。这不是我期望的那样吗?我认为FilterCollection会被调用,然后myFilteredFoos将为非null并允许强制转换。 FilterCollection不能返回空值,这使我得出不被调用的结论。另外,当我这样声明时myFilteredFoos: Queryable myFilteredFoos; Return调用抱怨myFilteredFoos可能在初始化之前使用。
69 c#  .net  unit-testing  mocking  moq 

3
Moq'ing方法,其中Expression <Func <T,bool >>作为参数传递
我是单元测试和模拟的新手!我正在尝试编写一些单元测试,其中涉及与数据存储交互的一些代码。数据访问由IRepository封装: interface IRepository&lt;T&gt; { .... IEnumerable&lt;T&gt; FindBy(Expression&lt;Func&lt;T, bool&gt;&gt; predicate); .... } 我尝试使用IRepository的IoC具体实现来测试的代码如下: public class SignupLogic { private Repository&lt;Company&gt; repo = new Repository&lt;Company&gt;(); public void AddNewCompany(Company toAdd) { Company existingCompany = this.repo.FindBy(c =&gt; c.Name == toAdd.Name).FirstOrDefault(); if(existingCompany != null) { throw new ArgumentException("Company already exists"); } repo.Add(Company); repo.Save(); } } 为了测试SignupLogic.AddNewCompany()本身的逻辑,而不是逻辑和具体的存储库,我在模拟IRepository并将其传递给SignupLogic。模拟的存储库如下所示: …
67 c#  unit-testing  moq 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.