【发布时间】:2017-12-18 17:40:16
【问题描述】:
对不起这个糟糕的标题,我已经尽力了。 也许有更多想象力的人可以帮助我和这个标题。
我是单元测试的新手,我有点迷茫。无论如何,我正在阅读“单元测试的艺术”。
我正在为 WebApi 应用程序使用 Entity Framework 6。 在这个申请中,我使用这种模式:
Api 调用调用 Repository 的 Service,该 Repository 将数据返回给将数据返回给 API 的服务。
所以,我有很多这样的方法:
API:
public async Task<IHttpActionResult> GetUserById(Guid id)
{
try
{
UserService userService = new UserService();
return Ok(await userService.GetById(id));
}
catch(Exception ex)
{
return InternalServerError(ex);
}
}
服务:
public class UserService
{
private IUserRepository userRepo;
public IUserRepository userRepo { get => userRepo; set => userRepo = value }
public async Task<AspNetUser> GetById(Guid id)
{
if(id == Guid.Empty() || id == null)
return null;
return await Task.Run(() => userRepo.GetById(id));
}
}
回购:
public interface IUserRepository
{
Task<AspNetUser> GetById(Guid id);
}
public class UserRepository: IUserRepository
{
public async Task<AspNetUser> GetById(Guid id)
{
return DbSet.Where(i => i.Id == id).FirstOrDefault();
}
}
这里有什么问题?会出什么问题?我应该测试什么?
【问题讨论】:
-
或许在这里开始考虑“在接口级别进行测试”?即
GetById(Guid id)在那里。 -
删除你的实现以开始并思考我希望这个类封装什么行为。
-
我用正确的例子更新了我的帖子。我把最后一个代码弄乱了。 “接口级别的测试”是什么意思? @MarkSchultheiss
-
@ImFlash 你想从给定的输入中得到什么输出
-
@ImFlash 是的,这是您应该编写的测试,我发现将它们分解为 GWT(Given When Thens)会有所帮助,假设存在具有 ID 的用户,当通过 ID 获取用户时,然后用户返回
标签: c# visual-studio entity-framework unit-testing entity-framework-6