Tag: MOQ

嘲笑任何给定types参数的generics方法调用

我有一个接口 public interface IDataProvider { T GetDataDocument<T>(Guid document) where T:class, new() } 我想嘲笑它,它会返回一个给定types的新实例,而不pipetypes如何: myMock.Setup(m => m.GetDataDocument<It.IsAny<Type>()>(It.IsAny<Guid>())) .Returns(() => new T()); (这当然不起作用,因为我不能只给moq任何types的参数,我不知道哪个types必须返回。 任何想法在这一个?

如何为moq中的属性赋值?

我有一个类的方法,返回一个Usertypes的对象 public class CustomMembershipProvider : MembershipProvider { public virtual User GetUser(string username, string password, string email, bool isApproved) { return new User() { Name = username ,Password = EncodePassword(password) ,Email = email ,Status = (isApproved ? UsuarioStatusEnum.Ativo : UsuarioStatusEnum.ConfirmacaoPendente) // … }; } // .. } User是一个域对象。 注意setter的Id属性为protected : public class User : IAuditable, IUser […]

testing控制器使用User.Identity.Name的操作

我有一个依赖于User.Identity.Name获取当前用户的用户名的行为来获取他的订单列表: public ActionResult XLineas() { ViewData["Filtre"] = _options.Filtre; ViewData["NomesPendents"] = _options.NomesPendents; return View(_repository.ObteLiniesPedido(User.Identity.Name,_options.Filtre,_options.NomesPendents)); } 现在我正在尝试为此编写unit testing,但是我遇到了如何为User.Identity.Name提供一个Mock。 如果我运行我的testing(没有模拟用户…),我得到一个空..exception。 这是正确的方法? 我在想,我的行动代码是不好的unit testing。

使用moq来模拟一些方法

我有以下的方法: public CustomObect MyMethod() { var lUser = GetCurrentUser(); if (lUser.HaveAccess) { //One behavior } else { //Other behavior } //return CustomObject } 我想嘲笑IMyInterface.GetCurrentUser ,以便在调用MyMethod我可以到一个代码path来检查它。 如何用Moq做到这一点? 我正在做以下事情: var moq = new Mock<IMyInterface>(); moq.Setup(x => x.GetCurrentUser()).Returns(lUnauthorizedUser); //act var lResult = moq.Object.MyMethod(); 但由于某种原因lResult始终为null ,当我试图在debugging中进入MyMethod ,我总是跳到下一个语句。

Moq:unit testing一个依赖于HttpContext的方法

考虑.NET程序集中的一个方法: public static string GetSecurityContextUserName() { //extract the username from request string sUser = HttpContext.Current.User.Identity.Name; //everything after the domain sUser = sUser.Substring(sUser.IndexOf("\\") + 1).ToLower(); return sUser; } 我想从使用Moq框架的unit testing中调用这个方法。 这个程序集是webforms解决scheme的一部分。 unit testing看起来像这样,但我缺lessMoq代码。 //arrange string ADAccount = "BUGSBUNNY"; string fullADName = "LOONEYTUNES\BUGSBUNNY"; //act //need to mock up the HttpContext here somehow — using Moq. string foundUserName […]

将Moq模拟对象传递给构造函数

我一直在使用RhinoMocks,但刚开始研究Moq。 我有这个非常基本的问题,而且让我感到惊讶的是,这个问题并没有立即开始。 假设我有以下的类定义: public class Foo { private IBar _bar; public Foo(IBar bar) { _bar = bar; } .. } 现在我有一个testing,我需要模拟发送给Foo的IBar。 在RhinoMocks中,我只是简单地按照下面的方式来做,而且它会工作得很好: var mock = MockRepository.GenerateMock<IBar>(); var foo = new Foo(mock); 然而,在Moq这似乎并没有以同样的方式工作。 我正在做如下: var mock = new Mock<IBar>(); var foo = new Foo(mock); 然而,现在它失败了 – 告诉我“不能从'Moq.Mock'转换为'IBar'。我在做什么错了?Moq的推荐方式是什么?

使用Moq来validation呼叫是以正确的顺序进行的

我需要testing下面的方法: CreateOutput(IWriter writer) { writer.Write(type); writer.Write(id); writer.Write(sender); // many more Write()s… } 我创build了一个Moq'd IWriter ,我想确保Write()方法以正确的顺序被调用。 我有以下testing代码: var mockWriter = new Mock<IWriter>(MockBehavior.Strict); var sequence = new MockSequence(); mockWriter.InSequence(sequence).Setup(x => x.Write(expectedType)); mockWriter.InSequence(sequence).Setup(x => x.Write(expectedId)); mockWriter.InSequence(sequence).Setup(x => x.Write(expectedSender)); 但是,在CreateOutput() Write()的第二次调用(写入id值)会引发MockException ,消息“ IWriter.Write()调用失败,模拟行为Strict。模拟上的所有调用都必须具有相应的设置。 ”。 我也很难find任何确定的,最新的Moq序列的文档/例子。 我做错了什么,或者我不能使用相同的方法设置序列? 如果没有,是否有一个替代我可以使用(最好使用Moq / NUnit)?

在Moq中重置模拟validation?

设置如下: public interface IFoo { void Fizz(); } [Test] public void A() { var foo = new Mock<IFoo>(MockBehavior.Loose); foo.Object.Fizz(); foo.Verify(x => x.Fizz()); // stuff here foo.Verify(x => x.Fizz(), Times.Never()); // currently this fails } 基本上我想在// stuff hereinput一些代码来使foo.Verify(x => x.Fizz(), Times.Never())通过。 因为这可能构成moq /unit testing滥用,所以我的理由是我可以这样做: [Test] public void Justification() { var foo = new Mock<IFoo>(MockBehavior.Loose); foo.Setup(x => […]

用moq嘲笑虚拟只读属性

我找不到办法做到这一点,虽然这可以手工完成,为什么不与moq?

如何使用moq模拟Controller.User

我有几个ActionMethods查询Controller.User的angular色是这样的 bool isAdmin = User.IsInRole("admin"); 在这种情况下方便地行事。 我开始用这样的代码对这些方法进行testing [TestMethod] public void HomeController_Index_Should_Return_Non_Null_ViewPage() { HomeController controller = new HomePostController(); ActionResult index = controller.Index(); Assert.IsNotNull(index); } 并且该testing失败,因为Controller.User未设置。 任何想法?