请问关于c的具体应用场景有哪些?

2026-04-29 03:331阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计608个文字,预计阅读时间需要3分钟。

请问关于c的具体应用场景有哪些?

我正在使用.Net Core 2 Web API,其架构采用MVC模式。当我尝试使用Moq进行单元测试时,会遇到一些问题。每个数据库都从一个基本数据库继承,该数据库具有以下基本方法:public T GetEntityById(int id)。

我正在使用.Net Core 2 Web API,其架构使用谓词,当我尝试使用Moq对我的代码进行单元测试时会导致一些问题.

我的每个存储库都从一个基本存储库继承,该存储库具有如下基本方法:

请问关于c的具体应用场景有哪些?

public T GetSingle(Expression<Func<T, bool>> predicate) { return _context.Set<T>().FirstOrDefault(predicate); } public virtual IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate) { return _context.Set<T>().Where(predicate); }

在我的用户控制器注册方法中,我想确保我不允许重复的电子邮件,我这样做:

var emailCheck = _userRepository.GetSingle(x => x.Email == user.Email); if (emailCheck != null) { // duplicate return StatusCode(StatusCodes.Status409Conflict, "This email is already in use."); }

在我的单元测试中,我想进行测试以确保我们不允许重复,所以我设置了它:

public void Signup_Fail_DuplicateEmail_Controller_Test() { var user = UserHelper.CreateSignupUser(); user.Email = "duplicate@test.com"; var uRepo = new Mock<IUserRepository>(); uRepo.Setup(u => u.GetSingle(x => x.Email == user.Email)).Returns(user); var uc = new UserController(uRepo.Object); var result = uc.Signup(user); var status = Assert.IsType<StatusCodeResult>(result); Assert.Equal(StatusCodes.Status409Conflict, status.StatusCode); }

无论我做什么,Setup方法总是返回null.现在我已经在几个地方读过Moq不能使用FirstOrDefault和其他类似帮助器的方法,但我不知道该怎么做,因为我的架构非常依赖于谓词.当然希望避免重新编写我的基础存储库,但我需要能够运行这样的测试.

思考?

无法比较表达式,因此mock将始终返回null.

如果这只是为了单独测试被测方法的流程,则可以使用It.IsAny< Expression< Func< T,bool>>>()作为参数匹配器.

public void Signup_Fail_DuplicateEmail_Controller_Test() { //Arrange var user = UserHelper.CreateSignupUser(); user.Email = "duplicate@test.com"; var uRepo = new Mock<IUserRepository>(); uRepo .Setup(_ => _.GetSingle(It.IsAny<Expression<Func<T, bool>>>())) .Returns(user); var uc = new UserController(uRepo.Object); //Act var result = uc.Signup(user); //Assert var status = Assert.IsType<StatusCodeResult>(result); Assert.Equal(StatusCodes.Status409Conflict, status.StatusCode); }

参考Moq Quickstart

上述方法适用于测试隔离单元测试中的预期行为.

但是,如果要测试实际表达式,则可以使用内存中集成测试或实际数据库来完成.

本文共计608个文字,预计阅读时间需要3分钟。

请问关于c的具体应用场景有哪些?

我正在使用.Net Core 2 Web API,其架构采用MVC模式。当我尝试使用Moq进行单元测试时,会遇到一些问题。每个数据库都从一个基本数据库继承,该数据库具有以下基本方法:public T GetEntityById(int id)。

我正在使用.Net Core 2 Web API,其架构使用谓词,当我尝试使用Moq对我的代码进行单元测试时会导致一些问题.

我的每个存储库都从一个基本存储库继承,该存储库具有如下基本方法:

请问关于c的具体应用场景有哪些?

public T GetSingle(Expression<Func<T, bool>> predicate) { return _context.Set<T>().FirstOrDefault(predicate); } public virtual IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate) { return _context.Set<T>().Where(predicate); }

在我的用户控制器注册方法中,我想确保我不允许重复的电子邮件,我这样做:

var emailCheck = _userRepository.GetSingle(x => x.Email == user.Email); if (emailCheck != null) { // duplicate return StatusCode(StatusCodes.Status409Conflict, "This email is already in use."); }

在我的单元测试中,我想进行测试以确保我们不允许重复,所以我设置了它:

public void Signup_Fail_DuplicateEmail_Controller_Test() { var user = UserHelper.CreateSignupUser(); user.Email = "duplicate@test.com"; var uRepo = new Mock<IUserRepository>(); uRepo.Setup(u => u.GetSingle(x => x.Email == user.Email)).Returns(user); var uc = new UserController(uRepo.Object); var result = uc.Signup(user); var status = Assert.IsType<StatusCodeResult>(result); Assert.Equal(StatusCodes.Status409Conflict, status.StatusCode); }

无论我做什么,Setup方法总是返回null.现在我已经在几个地方读过Moq不能使用FirstOrDefault和其他类似帮助器的方法,但我不知道该怎么做,因为我的架构非常依赖于谓词.当然希望避免重新编写我的基础存储库,但我需要能够运行这样的测试.

思考?

无法比较表达式,因此mock将始终返回null.

如果这只是为了单独测试被测方法的流程,则可以使用It.IsAny< Expression< Func< T,bool>>>()作为参数匹配器.

public void Signup_Fail_DuplicateEmail_Controller_Test() { //Arrange var user = UserHelper.CreateSignupUser(); user.Email = "duplicate@test.com"; var uRepo = new Mock<IUserRepository>(); uRepo .Setup(_ => _.GetSingle(It.IsAny<Expression<Func<T, bool>>>())) .Returns(user); var uc = new UserController(uRepo.Object); //Act var result = uc.Signup(user); //Assert var status = Assert.IsType<StatusCodeResult>(result); Assert.Equal(StatusCodes.Status409Conflict, status.StatusCode); }

参考Moq Quickstart

上述方法适用于测试隔离单元测试中的预期行为.

但是,如果要测试实际表达式,则可以使用内存中集成测试或实际数据库来完成.