инъекция в тесте - PullRequest
       7

инъекция в тесте

1 голос
/ 25 июля 2011

у меня есть:

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) - отправляет запрос в базу данных.

1 Ответ

0 голосов
/ 13 августа 2011

Похоже, все, что вам нужно сделать, это предоставить фиктивный объект для вашего свойства 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);
}
...