如何将值分配到最小起订量的属性?

编程入门 行业动态 更新时间:2024-10-22 20:25:28
本文介绍了如何将值分配到最小起订量的属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个返回类型的对象方法的类用户

I have a class with a method that returns an object of type User

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 is a domain object. Note the Id property with setter as protected:

public class User : IAuditable, IUser { public virtual int Id { get; protected set; } public virtual string Name { get; set; } public virtual string Email { get; set; } public virtual UsuarioStatusEnum Status { get; set; } public virtual string Password { get; set; } }

的 id是因为它是由数据库生成的保护。

在我的测试项目中,我有一个方法的假库商店保存/更新对象:

In my Test project I have a Fake repository with a method Store to save/update the object:

public void Store(T obj) { if (obj.Id > 0) _context[obj.Id] = obj; else { var generateId = _context.Values.Any() ? _context.Values.Max(p => p.Id) + 1 : 1; var stubUser = Mock.Get<T>(obj); // In test, will always mock stubUser.Setup(s => s.Id).Returns(generateId); _context.Add(generateId, stubUser.Object); } }

在 CustomMembershipProvider 我调用公共覆盖的MembershipUser CREATEUSER 方法的getUser 来创建一个用户。结果这样,所有我需要做的就是模仿的的getUser 方法,以便存储库可以生成编号

In CustomMembershipProvider I have public override MembershipUser CreateUser method that calls the GetUser to create a User. This way, all I have to do is mock the GetUser method so that the repository can generate the Id

var membershipMoq = new Mock<CustomMembershipProvider>(); membershipMoq.CallBase = true; membershipMoq .Setup(p => p.GetUser(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())) .Returns<string, string, string, bool>( (username, password, email, isAproved) => { var moqUser = new Mock<User>(); moqUser.Object.Name = username; moqUser.Object.Password = password; moqUser.Object.Email = email; moqUser.Object.Status = (isAproved ? UsuarioStatusEnum.Ativo : UsuarioStatusEnum.ConfirmacaoPendente); return moqUser.Object; }); _membershipProvider = membershipMoq.Object;

问题

在理论上一切是正确的。当 CREATEUSER 称之为'的getUser创建一个用户,该用户将返回模拟填补;

Problem

In theory everything is correct. When CreateUser call 'GetUser' to create a user, the user will return Mock filled;

[TestMethod] public void CreateUser_deve_criar_usuario_no_repositorio() { // Act MembershipCreateStatus status; var usr = _membershipProvider.CreateUser( _fixture.Create<string>(), _fixture.Create<string>(), _fixture.Create<string>(), null, null, true, null, out status); // usr should have name, email password filled. But not! // Assert status.Should().Be(MembershipCreateStatus.Success); }

的问题是,电子邮件,名称,密码是空的(默认值) !

The problem is that Email, Name, Password are empty (with default values)!

推荐答案

您准备嘲笑用户的方式有问题。

The way you prepare the mocked user is the problem.

moqUser.Object.Name = username;

将不设置名称,除非你已经设置了模拟正常。 赋值给属性之前试试这个:

will not set the name, unless you have setup the mock properly. Try this before assigning values to properties:

moqUser.SetupAllProperties();

这方法将准备在模拟的所有属性,能够记录所分配的值,然后重播后来(即作为不动产)。

This method will prepare all properties on the mock to be able to record the assigned value, and replay it later (i.e. to act as real property).

您也可以使用的SetProperty()的方法来设置各个属性。能够记录值所传递的

You can also use SetProperty() method to setup individual properties to be able to record the passed in value.

另一种方法是:

var mockUser = Mock.Of<User>( m => m.Name == "wahtever" && m.Email == "some@example"); return mockUser;

更多推荐

如何将值分配到最小起订量的属性?

本文发布于:2023-11-30 01:23:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1648250.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何将   最小   属性   分配   起订量

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!