nunit 测试中的注入

发布于 2024-11-26 06:16:54 字数 655 浏览 1 评论 0原文

我有:

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

I have:

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;
    }
}

I wont write test on GetUserById(). I have to now what is it doing, which result it's method gives me.
note that UserCriteria not in my namespace (i cannot see it from my test) UserRepository.GetById(id) - makes request to database.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

记忆里有你的影子 2024-12-03 06:16:54

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

It looks like all you need to do is supply a mock object for your UserRepository property so that you don't hit the database and can provide whatever results you like to verify your GetUserById method is working correctly.

For example, using NSubstitute you could do something like this:

[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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文