Кажется, что существует некоторая путаница в отношении того, как проводить модульное тестирование класса, который имеет зависимости.
Предположим, что тестируемый объект выглядит следующим образом
public class MService: IMService {
private readonly IMRepository mRepository;
public MService(IMRepository mRepository) {
this.mRepository = mRepository;
}
public List<FUser> GetFUser() {
var result = mRepository.ExecuteCommandReader();
return result
}
}
Чтобыпротестировав MService.GetFUser
, вы создадите экземпляр класса субъекта MService
и вставите все зависимости, которые когда-либо понадобятся для проверки поведения тестируемого метода.
В следующем примере теста зависимости будутиздевались с использованием Moq Mocking Framework.Вы можете так же легко создать поддельную реализацию, если пожелаете.
[TestClass]
public class MServiceTests {
[TestMethod]
public void Get_Users_ReturnsUserList() {
//Arrange
var expected = new List<FUser>() {
//populate with some users
};
IMRepository mockRepository = new Mock<IMRepository>();
mockRepository.Setup(_ => _.ExecuteCommandReader()).Returns(expected);
IMService mService = new MService(mockRepository.Object);
//Act
var resultList = mService.GetFUser();
//Assert
Assert.IsTrue(resultList.Count > 0);
}
}
Причина вашей первоначальной проблемы в том, что бегун тестов не смог создать тестовый класс, поскольку он (бегун) не был собран дляdo DI.
Чтобы протестировать предметный класс, вам нужно было создать экземпляр класса и внедрить все зависимости, необходимые для проверки поведения тестируемого метода.
Там действительно былонет необходимости использовать контейнер для такого маленького изолированного теста