Tag: moq

如何将项添加到Mock DbSet(使用Moq)

我正在尝试设置一个模拟DbSet用于测试目的。 我在这里使用了这个教程, http://www.loganfranken.com/blog/517/mocking-dbset-queries-in-ef6/并略微修改它,所以每次调用GetEnumerator都会返回一个新的枚举器(我遇到的另一个问题) 。 但是,我在向DbSet添加项目时遇到困难。 输出是preCount = 3 postCount = 3.但是,我希望它是precount = 3 postCount = 4.非常感谢任何帮助。 static void Main(string[] args) { Debug.WriteLine(“hello debug”); List stringList = new List { “a”, “b”, “c” }; DbSet myDbSet = GetQueryableMockDbSet(stringList); int preCount = myDbSet.Count(); myDbSet.Add(“d”); int postCount = myDbSet.Count(); Debug.WriteLine(“preCount = ” + preCount + ” postCount = […]

在c#中使用Moq进行模拟

我有以下代码: public interface IProductDataAccess { bool CreateProduct(Product newProduct); } ProductDataAccess类实现该接口。 public class ProductBusiness { public bool CreateProduct(Product newProduct) { IProductDataAccess pda = new ProductDataAccess(); bool result = pda.CreateProduct(newProduct); return result; } } 在这种情况下,如何通过IProductDataAccess接口为CreateProduct方法创建unit testing? 我想在ProductBusiness中有一个IProductDataAccess的公共实例,并使用Mock对象对其进行初始化,但是将数据访问暴露给UI层并不是一个好习惯。 谁能帮我?

Moq返回多个Linq表达式

我在我试图模拟的存储库中有以下方法: IEnumerable GetAll( Expression<Func> filter = null, Func<IQueryable, IOrderedQueryable> orderBy = null, string includeProperties = “”) 我设置了以下内容: mockContactNumberRepository.Setup(x => x.GetAll( It.IsAny<Expression<Func>>(), It.IsAny<Func<IQueryable, IOrderedQueryable>>(), It.IsAny())) .Returns(new Func<Expression<Func>, IQueryable>(ex => _contactNumbers.Where(ex.Compile()).AsQueryable())); 运行unit testing时,我收到有关参数计数不匹配的错误消息。 我理解这是因为Returns仅指定第一个参数,但我不确定如何指定其他参数。 我发现很多问题都提出类似的问题,但没有找到一个有多个lambda表达式的问题。 您将给予的任何帮助将非常感激。

Moq DbSet NotImplementedException

我有一个直到最近一直工作的Moq DbSet,但是自上次更新依赖项以来,它一直在IQueryable.Provider NotImplementedException 。 代码使用如下: var mockSet = new Mock<DbSet>(); var list = new List(); var queryable = list.AsQueryable(); mockSet.As<IQueryable>().Setup(m => m.Provider).Returns(queryable.Provider); mockSet.As<IQueryable>().Setup(m => m.Expression).Returns(queryable.Expression); mockSet.As<IQueryable>().Setup(m => m.ElementType).Returns(queryable.ElementType); mockSet.As<IQueryable>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator()); var f =mockSet.Object.FirstOrDefault(); // NotImplementedException thrown here 引发的exception如下: System.NotImplementedException The member ‘IQueryable.Provider’ has not been implemented on type ‘DbSet`1Proxy_1’ which inherits from […]

如何模拟使用MOQ返回int的方法

我有一个类来检索内容,它有一个方法,在检索它之前需要一些输入(filter)。 其中一个“输入”调用另一个方法,它基本上返回一个int,如何使用MOQ模拟它? 这是一个例子: namespace MyNamespace { public class ConfigMetaDataColumns : MyModel { public int FieldID { get { return ValueInt(“FieldID”); } } public int OrderId { get { return ValueInt(“OrderId”); } } public string Label { get { return ValueString(“Label”); } } public string FieldName { get { return ValueString(“FieldName”); } } public int IsReadOnly […]

嘲笑Guid.NewGuid()

假设我有以下实体: public class User { public int Id { get; set; } public string Username { get; set; } public Guid UserGuid { get; set; } public Guid ConfirmationGuid { get; set; } } 以下接口方法: void CreateUser(string username); 部分实现应该创建两个新的GUID:一个用于UserGuid ,另一个用于ConfirmationGuid 。 他们应该通过将值设置为Guid.NewGuid()来完成此操作。 我已经使用接口抽象了Guid.NewGuid(): public interface IGuidService { Guid NewGuid(); } 因此,当只需要一个新的GUID时,我可以轻松地模拟它。 但是我不确定如何在一个方法中模拟对同一方法的两个不同的调用,以便它们返回不同的值。

Moq C#内置

我正在尝试模拟SearchResultCollection类。 但是,当我尝试拦截对PropertiesLoaded getter的调用时,我的测试会抛出exception: System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: x => x.PropertiesLoaded 我的代码: Mock searchResultMock = new Mock(); // Set up collection that will be returned string[] tempData = { “one”, “two” }; searchResultMock.SetupGet(x => x.PropertiesLoaded).Returns(tempData); 有没有人成功嘲笑过这样的课程? 有问题的财产只有一个吸气剂,而不是虚拟的。 // // Summary: // Gets the System.DirectoryServices.DirectorySearcher properties that were // specified before […]

如何使用moq模拟控制器上下文

我正在尝试MOQ框架,现在我已经遇到了障碍。 以下unit testing失败,因为ViewName属性的实际值是空字符串。 任何人都可以指出我正确的方向,为什么这不通过测试? [TestMethod] public void Can_Navigate_To_About_Page() { var request = new Mock(); request.Setup(r => r.HttpMethod).Returns(“GET”); var mockHttpContext = new Mock(); mockHttpContext.Setup(c => c.Request).Returns(request.Object); var controllerContext = new ControllerContext(mockHttpContext.Object, new RouteData(), new Mock().Object); var controller = new HomeController(); controller.ControllerContext = controllerContext; var result = controller.About() as ViewResult; Assert.AreEqual(“About”, result.ViewName); } 以下还会产生一个空的ViewName。 HomeController controller = […]

validation使用Moq调用的generics方法

我无法validation使用Moq.Mock.Verify调用IInterface.SomeMethod(T arg) Moq.Mock.Verify 。 我可以使用It.IsAny()或It.IsAny()validation是否在“标准”接口上调用了该方法,并且我没有使用It.IsAny()validationgenerics方法调用的It.IsAny() ,但我无法validation使用It.IsAny()调用generics方法 – 它总是说没有调用该方法并且unit testing失败。 这是我的unit testing: public void TestMethod1() { var mockInterface = new Mock(); var classUnderTest = new ClassUnderTest(mockInterface.Object); classUnderTest.Run(); // next three lines are fine and pass the unit tests mockInterface.Verify(serviceInterface => serviceInterface.NotGenericMethod(It.IsAny()), Times.Once()); mockInterface.Verify(serviceInterface => serviceInterface.NotGenericMethod(It.IsAny()), Times.Once()); mockInterface.Verify(serviceInterface => serviceInterface.GenericMethod(It.IsAny()), Times.Once()); // this line breaks: “Expected invocation […]

Moq是一个索引属性,并使用返回/回调中的索引值

我想moq一个具有索引的属性,我希望能够在回调中使用索引值,就像在moq方法的回调中使用方法参数一样。 可能最容易用一个例子来certificate: public interface IToMoq { int Add(int x, int y); int this[int x] { get; set; } } Action DoSet = (int x, int y) => { Console.WriteLine(“setting this[{0}] = {1}”, x, y); throw new Exception(“Do I ever get called?”); }; var mock = new Mock(MockBehavior.Strict); //This works perfectly mock.Setup(m => m.Add(It.IsAny(), It.IsAny())) .Returns((a, […]