Tag: moq

Moq – 使用在执行测试期间更改的参数validation调用

给出以下代码 public class Entity { public string Name { get; set; } public string Status { get; set; } } public interface IRepository { void InsertEntity(Entity entity); void UpdateEntity(Entity entity); } public class Processor { private IRepository _repository; public Processor(IRepository repository) { _repository = repository; } public void Execute(string name) { var entity = new […]

如何模拟HttpContext.User

我正在开发一个Asp.net MVC 5项目,我正在尝试设置一个模拟以在控制器中返回自定义主体。 我有搜索并尝试了不同的方法,但没有一个有效。 我有一个BaseController,我的所有控制器都inheritance自。 BaseController有一个User属性,它在getter中返回HttpContext.User。 HttpContext.user在项目中调用时返回一个值,但在从unit testing项目调用时返回null。 BaseController public class BaseController : Controller { protected virtual new CustomPrincipal User { get { return HttpContext.User as CustomPrincipal; } ***<== Line with issue*** } } 自定义校长 public class CustomPrincipal : IPrincipal, ICustomPrincipal { public IIdentity Identity { get; private set; } public string UserId { get; […]

在moq中测试多次调用的方法

我有这样的界面: Interface IWriteFile { string FileName {get;set;} void Open(); void WriteData(string dataToWrite); void Close(); } 我想测试一个将使用此接口填充文件的类。 它会多次调用WriteData,我只想测试最终输出。 有没有办法向Mock对象引入一个新的私有字段,每次调用WriteData(Data)时都会附加该字段? 我真的只想看看文件在一天结束时会是什么样子。 有更好的方法吗?

Moq和代码合同

使用类不变量时,Code契约似乎在任何地方都会引入代码。 像这样的东西 [ContractClassFor(typeof(IX))] interface IXContract { [ClassInvariant] void Invariant() { … } } [ContractClass(typeof(IXContract))] interface IX { event EventHandler b; } var a = new Mock(); a.Raise(x => xb += null); 失败并显示错误消息 Could not locate event for attach or detach method Void $InvariantMethod$(). 有人知道解决方案吗?

Moq框架Func

我是Moq和TDD的新手,我想要做的是在存储库接口上设置方法。 这是全文。 我有一个名为Tenant的域实体类,其属性为BusinessIdentificationNumber public class Tenant:EntityBase,IAggregateRoot { … public string BusinessIdentificationNumber {get;set;} … } 接下来我有这个实体的存储库,接口就像 public interface IRepository { … T FindBy(Func func); … } 问题出在哪里,我使用域名服务,其中包含创建租户的规则,就像 public class TenantCreationService:ITenantCreationService { public TenantCreationService(IRepository tenantRepository){…} public void CreateTenant(Tenant tenant) { //from here there is call to IRepository.FindBy(funcMethod); } } 在我正在测试TenantCreationService的unit testing中,我模拟了传递给构造函数的存储库,但我想测试该function: 当具有BusinessIdentificationNumber的租户已经存在于存储或会话中时,应该返回它。 所以我试着这样做 repositoryMock.Setup(x=>x.FindBy(It.Is(t=>t.BusinessIdentificationNumber == _tenantInTest.BusinessIdentificationNumber))).Returns(_tenantInTest) 但它没有编译。 […]

测试自定义AuthorizationAttribute时抛出NullReferenceException

我看了看: 如何进行unit testing以测试检查请求标头的方法? 如何使用moq模拟Controller.User 如何对应用了[Authorize]属性的控制器方法进行unit testing? 我正在尝试测试我编写的自定义AuthorizeAttribute。 我尝试了很多不同的东西来让它发挥作用。 这是我目前的尝试。 [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)] public class ConfigurableAuthorizeAttribute : AuthorizeAttribute { private Logger log = new Logger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private IRoleHelper roleHelper; public ConfigurableAuthorizeAttribute() { roleHelper = new ADRoleHelper(); } public ConfigurableAuthorizeAttribute(IRoleHelper roleHelper) { this.roleHelper = roleHelper; } protected override bool AuthorizeCore(HttpContextBase httpContext) { if (!httpContext.User.Identity.IsAuthenticated) […]

在Moq中为返回void的方法分配参数

在这个问题中 ,我发现这个答案似乎是向我解决问题的最佳方法。 提供的代码假定被模拟的函数返回一个值: bool SomeFunc(out ISomeObject o); 但是,我想要模拟的对象有一个out函数如下: void SomeFunc(out ISomeObject o); 来自上述答案的相关代码片段: public delegate void OutAction(out TOut outVal); public static IReturnsThrows OutCallback( this ICallback mock, OutAction action) where TMock : class { // … } Void不是TReturn的有效类型。 因此,我相信我必须以某种方式调整此代码,以使其与返回void的方法一起使用。 但是怎么样?

如何使用Moq模拟ILogger / ILoggerService

我正在为View Model类编写一些unit testing。 该类的构造函数注入ILoggerService。 该接口定义了一个返回ILogger的方法GetLog。 类似下面的东西, 它代表一个实现ILoggable的类: – protected ViewModelBase(ILoggerService loggerService) { Logger = loggerService.GetLog(this); } 我正在尝试unit testing我的CreateNewOrder方法,如下所示: private void CreateNewOrder(INewOrderViewModel newOrderViewModel) { Logger.Log(“Sending Create New Order Message”, LogCategory.Info); var createNewOrderMessage = new OrderMessage(newOrderViewModel); _eventAggregator.GetEvent().Publish(createNewOrderMessage); } 我将如何模拟ILoggerService以便返回有效的Logger? 目前我的Unit测试抛出NullReferenceExeception。 我正在用Moq做我的嘲笑。 我想象我需要做一些事情 var loggerService = new Mock(); loggerService.Setup(svc => svc.GetLog(??)) 但是,如果不让我的测试类实现ILoggable,我无法看到。 提前致谢。

使用Moq在mock对象中定义方法实现

情况就是这样。 我有异步调用所以我需要为此进行Mid tier才能测试它。 request.BeginGetResponse(new AsyncCallback(LoginCallback), requestState); 因此,为了能够在没有实际请求的情况下进行测试,我创建了可以模拟的界面。 public interface IRequestSender { void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState); } 然后在实现中我可以使用上面的那个调用,我可以提供一些模拟类来调用我的回调方法,无论请求是否有效。 我的模拟类看起来像这样。 public class RequestSenderMock : IRequestSender { public void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState) { var result = new Mock(); result.Setup(x => x.AsyncState).Returns(requestState); internalCallback(result.Object); } } 我现在可以在unit testing中轻松创建模拟对象并使用它。 但是当我创造 var sender = new Mock(); […]

如何使用Moq和Autofixture模拟entity framework6

我正在使用AutoMoq,但由于entity framework(使用dbContext和代码优先) dbContext我有点困惑如何编写我的第一个unit testing // in service class(constructor) private readonly MyContext context; public PriceService(MyContext context) { this.context = context; } // following would be in nunit test method. var fixture = new Fixture().Customize(new AutoMoqCustomization()); var priceService = fixture.Create(); 当我运行unit testing时,它会崩溃 在Ploeh.AutoFixture.Kernel.TerminatingSpecimenBuilder.Create(对象请求,ISpecimenContext上下文) 在Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.c__DisplayClass6.b__1(ISpecimenBuilder b) 在System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() 在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在System.Linq.Enumerable.d__a5`1.MoveNext() 在System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable`1 source) 在Ploeh.AutoFixture.Kernel.RecursionGuard.Create(对象请求,ISpecimenContext上下文) 在Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.c__DisplayClass6.b__1(ISpecimenBuilder b) 在System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() 在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在System.Linq.Enumerable.d__a5`1.MoveNext() […]