【问题标题】:injection in nunit test在 nunit 测试中注入
【发布时间】:2011-07-25 07:14:32
【问题描述】:

我有:

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) - 向数据库发出请求。

【问题讨论】:

    标签: .net unit-testing code-injection


    【解决方案1】:

    看起来您需要做的就是为您的 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多