Tag: moq

Moq.Mock – 如何设置一个表达式的方法

我正在模拟我的存储库接口,我不知道如何设置一个接受表达式并返回一个对象的方法? 我正在使用Moq和NUnit 接口: public interface IReadOnlyRepository : IDisposable { IQueryable All() where T : class; T Single(Expression<Func> expression) where T : class; } 使用IQueryable进行测试已经设置,但不知道如何设置T Single: private Moq.Mock _mockRepos; private AdminController _controller; [SetUp] public void SetUp() { var allPages = new List(); for (var i = 0; i < 10; i++) { allPages.Add(new Page { Id […]

如何将此EF Mock设置代码编写为可重用的Generic Boilerplate?

我正在使用moq,ef 6和xunit。 我发现自己一遍又一遍地编写这段代码,并且想到也许我可以把它变成一个通用的方法,但是遇到了一些麻烦。 public static void CreateSalesMock(List sales, Mock dbContextMock) { var data = sales.AsQueryable(); var mockSet = new Mock<DbSet>(); mockSet.As<IQueryable>() .Setup(x => x.Provider) .Returns(data.Provider); mockSet.As<IQueryable>() .Setup(x => x.Expression) .Returns(data.Expression); mockSet.As<IQueryable>() .Setup(x => x.ElementType) .Returns(data.ElementType); mockSet.As<IQueryable>() .Setup(x => x.GetEnumerator()) .Returns(data.GetEnumerator()); dbContextMock.Setup(x => x.Sales).Returns(mockSet.Object); } 现在我在我的数据库中有许多其他表,所以如果我可以编写一个方法来接收该数据的列表并进行设置,那么我可以通过它进行模拟查询会很棒。 public static void CreateMockSet(T dataList, TA model, Func lambda, Mock […]

每个主要模拟框架的现实利弊是什么?

另请参阅“ 为.Net选择模拟框架时应该考虑什么 ” 我正在尝试决定在我最近开始使用的.NET项目上使用的模拟框架。 我想加快我对不同框架的研究。 我最近阅读了这篇博客文章http://codevanced.net/post/Mocking-frameworks-comparison.aspx,并想知道是否有任何StackOverflow受众有任何可以添加的东西,以实现现实世界的优势和对框架的警告。 人们是否可以列出他们目前正在使用或已经调查过自己在.NET项目中使用的模拟框架的优缺点。 我认为这不仅有助于我决定当前的项目,还可以帮助其他人在为他们的情况选择正确的框架时做出更明智的决策。 我不是任何框架的专家,但我想得到支持和反对我遇到的主要框架的论据: RhinoMocks 起订量 TypeMock隔离器 NMock 痣 我错过了其他可用的替代品。 我也喜欢那些由于问题而转换或停止使用产品的用户的见解。

如何使用Moq测试方法调用顺序

目前我有: [Test] public void DrawDrawsAllScreensInTheReverseOrderOfTheStack() { // Arrange. var screenMockOne = new Mock(); var screenMockTwo = new Mock(); var screens = new List(); screens.Add(screenMockOne.Object); screens.Add(screenMockTwo.Object); var stackOfScreensMock = new Mock(); stackOfScreensMock.Setup(s => s.ToArray()).Returns(screens.ToArray()); var screenManager = new ScreenManager(stackOfScreensMock.Object); // Act. screenManager.Draw(new Mock().Object); // Assert. screenMockOne.Verify(smo => smo.Draw(It.IsAny()), Times.Once(), “Draw was not called on screen mock […]

将It.IsAny ()和It.IsAny ()的值传递给方法设置有什么区别

我正在使用Moq并且想要创建构建器类来创建具有预设合理默认值的模拟,可以根据需要在测试设置期间覆盖这些默认值。 我采用的方法使用扩展方法,我传递输入参数值和预期输出。 在这样做的过程中,我看到了在我看来是语义上等效的代码中的不同行为:直接在设置中传递It.IsAny()与在设置中间接传递It.IsAny()的值。 例: public interface IFoo { bool Bar(int value); bool Bar2(int value); } public class Foo : IFoo { public bool Bar(int value) { return false; } public bool Bar2(int value) { return false; } } var mock = new Mock(); mock.Setup(x => x.Bar(It.IsAny())).Returns(true); Assert.IsTrue(mock.Object.Bar(123)); // Succeeds var myValue = It.IsAny(); mock.Setup(x => […]

我如何模拟User.Identity.GetUserId()?

我正在尝试对我的代码进行unit testing,其中包括以下行: UserLoginInfo userIdentity = UserManager.GetLogins(User.Identity.GetUserId()).FirstOrDefault(); 因为我无法得到,我只是被困在一点上: User.Identity.GetUserId() 返回一个值。 我在设置控制器时一直在尝试以下方法: var mock = new Mock(); mock.Setup(p => p.HttpContext.User.Identity.GetUserId()).Returns(“string”); 但是它给出了“NotSupportedException未被用户代码处理”的错误。 我也尝试过以下方法: ControllerContext controllerContext = new ControllerContext(); string username = “username”; string userid = Guid.NewGuid().ToString(“N”); //could be a constant List claims = new List{ new Claim(“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”, username), new Claim(“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”, userid) }; var genericIdentity = new GenericIdentity(“Andrew”); genericIdentity.AddClaims(claims); […]

如何模拟非虚方法?

[TestMethod] public void TestMethod1() { var mock = new Mock(); mock.Setup(x => x.SendEmail()).Returns(true); var cus = new Customer(); var result = cus.AddCustomer(mock.Object); Assert.IsTrue(result); } public class Customer { public bool AddCustomer(EmailService emailService) { emailService.SendEmail(); Debug.WriteLine(“new customer added”); return true; } } public class EmailService { public virtual bool SendEmail() { throw new Exception(“send email failed […]