我有:
using Ninject;
public class ServiceManager : IServiceHelper
{
[Inject]
public IEntityRepository<User, UserCriteria> UserRepository
{
get;
set;
}
public User GetUserById(object id)
{
User user = UserRepository.GetById(id);
if (user != null && user.IsHolding.HasValue && user.IsHolding.Value)
user.Companies = GetAllCompanies().ToList();
return user;
}
}
我不会在GetUserById()
上写测试。我现在必须做什么,结果它的方法给了我。
请注意,UserCriteria不在我的命名空间中(我无法从我的测试中看到它)UserRepository.GetById(id)
- 向数据库发出请求。
答案 0 :(得分:0)
看起来您需要做的就是为您的UserRepository属性提供一个模拟对象,这样您就不会访问数据库,并且可以提供您想要的任何结果来验证您的GetUserById方法是否正常工作。
例如,使用NSubstitute你可以这样做:
[TestMethod]
public void GetUserByIdDoesSomething()
{
var userRepository = Substitute.For<IEntityRepository<User, UserCriteria>>();
//Do something to ensure GetAllCompanies will return a value
var user = new User();
userRepository.GetById(Arg.Any<object>()).Returns(user);
var serviceManager = new ServiceManager();
serviceManager.UserRepository = userRepository;
var result = serviceManager.GetUserById(1);
Assert.AreEqual(user, result);
Assert.IsTrue(result.Companies.Count() > 0);
}