寻找有关测试的一些说明。我的服务层中有以下方法:
readonly IDomainModelRepository domainModelRepository;
public DomainModelDetailsDto Edit(int DomainModelID, IPrincipal User)
{
DomainModel myDomainModel = domainModelRepository.Find(DomainModelID);
if ((myDomainModel == null) || (!myDomainModel.UserCanEdit(User)))
throw new UnauthorisedException();
// Other stuff here...
}
现在我正在构建一套测试但是遇到了一些障碍。
myDomainModel.UserCanEdit(User)
的调用,因为DomainModel未实现任何接口。它变得更加复杂,因为UserCanEdit中包含的逻辑实际上会检查其图中其他域模型上的字段。那么如何轻松地将其设置为返回设定值以允许我测试服务?也许问题是我的代码本身需要重构才能更方便地进行测试。如果是这样,所有建议都表示赞赏!
答案 0 :(得分:0)
如果您想测试我认为您需要在myDomainModel
上使用界面,否则您无法模拟它。
我知道这是一个非常有争议的观点,但是越来越多的人认为Repository模式是一种反模式,因为它产生的问题多于它解决的问题。
我个人使用Entity Framework并更改TT文件以生成Context和界面,而不是在我的所有应用程序中我只使用该界面。
测试我只是模拟界面,我能够测试一切。我所做的一项更改是使用DbSet<T>
更改所有IDbSet<T>
。最后,我创建了一个Test Helper,其函数接收ObservableCollection
并返回IDbSet
,并且我能够验证所有内容。
答案 1 :(得分:0)
您可以通过创建该方法UserCanEdit
并使用派生的测试类来覆盖它来存储virtual
。然后,您的模拟存储库可以返回此测试类集的实例,以根据您要测试的内容返回true或false。