Tag: moq

Moq工作单位

我是unit testing的新手,我想为我的搜索function创建一个测试。 我的服务层看起来像: public class EmployeeService: BaseService, IEmployeeService { public EmployeeService(IUnitOfWork unitOfWork) : base(unitOfWork) { _employeeRepo = unitOfWork.EmployeeRepository; } public IEnumerable Search(Employee advancedSearch, int[] divisionIds, bool showInactive, int pageSize, int? page) { return _employeeRepo.Search(advancedSearch, divisionIds, showInactive, pageSize, page); } } unit testing: [Test] public void SearchShouldFilterActiveEmployees() { var employees = new List { new Employee […]

我如何使用Moq IFindFluent来调用ToListAsync?

我正在测试MongoDB C#驱动程序的包装器。 我有这行代码: Collection.Find(predicate).ToListAsync(); 其中Collection的类型为IMongoCollection而Find(predicate)返回实现IFindFluent的实例。 ToListAsync()是将结果转换为列表的扩展,我假设。 我正在尝试编写unit testing,我很难处理这个问题。 我不能创建一个包装类,因为那就是我正在做的事情。 我更愿意这样做,所以ToListAsync()返回一个创建的列表或模拟Find()返回一些可以列出的列表。

使用MOQ模拟构造函数

我有一个B类,其构造函数参数类型为Class A. 我希望在为B类创建模拟时,类A被模拟。 我怎样才能做到这一点? 我试过MockBehavior Loose / Strict,但这没有帮助!

越过entity frameworkBeginTransaction

我试图理解unit testing中的模拟,并将unit testing过程集成到我的项目中。 所以我一直走过几个教程并重构我的代码以支持模拟,无论如何,我无法通过测试,因为我试图测试的数据库方法是使用事务,但是在创建事务时,我得到了 底层提供程序在Open上失败。 没有交易,一切正常。 我目前的代码是: [TestMethod] public void Test1() { var mockSet = GetDbMock(); var mockContext = new Mock(); mockContext.Setup(m => m.Repository).Returns(mockSet.Object); var service = new MyService(mockContext.Object); service.SaveRepository(GetRepositoryData().First()); mockSet.Verify(m => m.Remove(It.IsAny()), Times.Once()); mockSet.Verify(m => m.Add(It.IsAny()), Times.Once()); mockContext.Verify(m => m.SaveChanges(), Times.Once()); } // gets the DbSet mock with one existing item private Mock<DbSet> GetDbMock() […]

如何模拟Excel VSTO插件中的行?

我试图在一个新的Range行中放置一个模拟的Range (包含值的单元格)。 但是当我尝试从Range访问特定元素时,会抛出exception。 我已经尝试了一切,有没有人知道我在这里做错了什么? 例外 消息:测试方法xxx.MockUtilsTest.MockRowsTest抛出exception:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法将带有[]的索引应用于类型为“Castle.Proxies.RangeProxy”的表达式 测试 [TestMethod] public void MockRowsTest() { var row1 = MockUtils.MockCells(“test_row_1”, “test_row_1”); var row2 = MockUtils.MockCells(“test_row_2”, “test_row_2”); var range = MockUtils.MockRows(row1, row2); Assert.IsNotNull(range); Assert.AreEqual(2, range.Count); Assert.IsNotNull(range.Rows); Assert.AreEqual(2, range.Rows.Count); Assert.AreSame(row1, range.Rows[1].Cells[1]); // exception is thrown here Assert.AreSame(row2, range.Rows[2].Cells[1]); Assert.AreEqual(“test_row_1”, range.Rows[1].Cells[1].Value2); Assert.AreEqual(“test_row_2”, range.Rows[2].Cells[1].Value2); } MockUtils public static Range MockCellValue2(Object value) { var […]

如何断言是否使用nunit调用了一个方法

是否可以断言是否已调用方法? 我正在测试以下方法,我想声明_tokenManager.GetToken()已被调用。 我只是想知道方法是否已被调用,因为该方法不返回值。 我正在使用Moq。 谢谢, 代码段 public void Subscribe(string code, string emailAddress, string columnKey) { // Request authentication token var token = _tokenManager.GetToken(code, false); if (!_tokenValidator.Validate(token)) { // Token has expired or invalid – refresh the token token = _tokenManager.GetToken(code, true); } // Subscribe email _silverpopRepository.Subscribe(token.AccessToken, emailAddress, columnKey); }

使用Moq调用方法时如何引发事件?

我有这样的界面: public interface IMyInterface { event EventHandler Triggered; void Trigger(); } 我的unit testing中有一个模拟对象,如下所示: private Mock _mockedObject = new Mock(); 我想做这样的事情: // pseudo-code _mockedObject.Setup(i => i.Trigger()).Raise(i => i.Triggered += null, this, true); 但是,在返回的ISetup接口上看起来不像Raise 。 我该怎么做呢?

使用Moq模拟具有内部构造函数的类型

我正在尝试从Microsoft Sync Framework模拟一个类。 它只有一个内部构造函数。 当我尝试以下内容时: var fullEnumerationContextMock = new Mock(); 我收到此错误: System.NotSupportedException:Parent没有默认构造函数。 必须显式定义默认构造函数。 这是堆栈跟踪: System.Reflection.Emit.TypeBuilder.DefineDefaultConstructorNoLock(MethodAttributes attributes)System.Reflection.Emit.TypeBuilder.DefineDefaultConstructor(MethodAttributes attributes)System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()System.Reflection.Emit.TypeBuilder.CreateType()Castle。 DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType()Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(Type [] interfaces,ProxyGenerationOptions options)Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options)Castle。 DynamicProxy.ProxyGenerator.CreateClassProxyType(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options)Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options,Object [] constructorArguments,IInterceptor [] interceptors)Castle.DynamicProxy。 ProxyGenerator.Create ClassProxy(类型classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions选项,IInterceptor []拦截器)Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(类型classToProxy,Type [] additionalInterfacesToProxy,IInterceptor []拦截器)Moq.Mock 1.b__0() Moq.PexProtector.Invoke(Action action) Moq.Mock 1.InitializeInstance() 我该如何解决这个问题呢?

在entity framework6.1中模拟DbContext

我发现了一些例子(显然)显示了用EF 6模拟DbContext的明显工作示例,然而,它们似乎都不适合我,我不完全确定原因。 这是我设置模拟的unit testing代码; var mockData = new List { new User { Email = “my@email.com”, Id = 1 } }.AsQueryable(); var mockSet = new Mock<DbSet>(); mockSet.As<IQueryable>().Setup(m => m.Provider).Returns(mockData.Provider); mockSet.As<IQueryable>().Setup(m => m.Expression).Returns(mockData.Expression); mockSet.As<IQueryable>().Setup(m => m.ElementType).Returns(mockData.ElementType); mockSet.As<IQueryable>().Setup(m => m.GetEnumerator()).Returns(mockData.GetEnumerator()); var mockContext = new Mock(); mockContext.Setup(c => c.Users).Returns(mockSet.Object); 然后调用我正在测试的服务; var service = new UsersService(mockContext.Object); var user = […]

如何unit testing使用Sitecore.Context.Item的GlassController动作

我是sitecore开发人员,我想创建一个示例sitecore螺旋unit testing项目,用于测试您在“ArticleController”控制器的Index()操作方法中看到的逻辑: public class ArticleController : GlassController { public override ActionResult Index() { // If a redirect has been configured for this Article, then redirect to new location. if (Sitecore.Context.Item.Fields[SitecoreFieldIds.WTW_REDIRECT_TO] != null && !string.IsNullOrEmpty(Sitecore.Context.Item.Fields[SitecoreFieldIds.WTW_REDIRECT_TO].Value)) { var link = (LinkField)Sitecore.Context.Item.Fields[SitecoreFieldIds.WTW_REDIRECT_TO]; if (link != null) { if (link.IsInternal) { return Redirect(Sitecore.Links.LinkManager.GetItemUrl(link.TargetItem)); } else { return Redirect(link.Url); } […]