首页新闻招聘找找看知识库

单元测试,疑惑

0
悬赏园豆:5 [已关闭问题] 关闭于 2018-01-15 14:27

  代码是针对UserService.Add()编写单元测试,用到了Moq,整个测试写下来能通过,感觉写的不对(没有意义)。正确的做法应该怎么来写这个测试?希望能指出我理解错误的地方或者伪代码也行。

public class UserService : IUserService
    {
        private IUserRepository _userRepository;
        private IFundRepository _fundRepository;
        private IUnitOfWork _unitOfWork;

        public UserService(IUserRepository userRepository,IFundRepository fundRepository,IUnitOfWork unitOfWork)
        {
            _userRepository = userRepository;
            _fundRepository = fundRepository;
            _unitOfWork = unitOfWork;
        }
        
        public async Task<bool> Add(AddUserDto addUserDto)
        {
            var user = Mapper.Map<User>(addUserDto);
            _userRepository.Add(user);
            _fundRepository.Add(new Fund() { User= user,Balance=addUserDto.Balance });
            return await _unitOfWork.CommitAsync() > 0;
        }
    }
复制代码
public class UserServiceTests
    {
        public UserServiceTests()
        {
            AutoMapperConfiguration.Initial();
        }

        [Fact]
        public async void AddTest()
        {
            //fack data
            var addUserDto = new AddUserDto() {Balance=0,Email= "666@qq.com",NickName= "ww" };
            var user = Mapper.Map<User>(addUserDto);
            var fund = new Fund() { Balance = addUserDto.Balance, User = user };

            var userRepository = new Mock<IUserRepository>();
            var fundRepository = new Mock<IFundRepository>();
            var unitOfWork = new Mock<IUnitOfWork>();
            userRepository.Setup(u => u.Add(user));
            fundRepository.Setup(f => f.Add(fund));
            unitOfWork.Setup(w => w.CommitAsync()).Returns(Task.FromResult(2));

            UserService userService = new UserService(userRepository.Object, fundRepository.Object, unitOfWork.Object);
            var result = await userService.Add(addUserDto);
            Assert.True(result);
        }
    }
复制代码
以后会觉得昵称很幼稚的主页 以后会觉得昵称很幼稚 | 初学一级 | 园豆:145
提问于:2018-01-12 16:59
< >
分享
所有回答(3)
0

你既然已经有了UOW了,那么这里的rollback的testcase呢?

Daniel Cai | 园豆:10105 (专家六级) | 2018-01-12 17:38

rollback是EF处理的

0

根据业务需求组织测试,业务场景、参数范围、错误处理。。。。

你这个感觉是代码写完了,后补的测

何来 | 园豆:131 (初学一级) | 2018-01-12 18:08

是的,这是个Demo

0

单元测试,重点是单元,你希望这个测试测试的是哪一个用例,哪一种情况。要防止的是哪一种可能的错误。

爱编程的大叔 | 园豆:26875 (高人七级) | 2018-01-13 11:38

UserService.add()就是一个工作单元,添加一个用户同时给这个用户添加一个资金账户。可能出现的错误大概就是用户已存在或者字段类型不匹配或者过长吧,这样一来是不是应该写针对领域逻辑的测试?因为上述错误点都应该是在领域逻辑里面判断。

清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册