C# UnitTest类中的IOC-Unity.WebApi
我已经成功地在web api项目中实现了Unity.WebAPI。有一些消息表明MService类的新实例没有被创建。当我运行单元测试方法时,我收到以下错误消息 无法获取类MServiceTests的默认构造函数 服务等级C# UnitTest类中的IOC-Unity.WebApi,c#,unit-testing,asp.net-web-api,inversion-of-control,C#,Unit Testing,Asp.net Web Api,Inversion Of Control,我已经成功地在web api项目中实现了Unity.WebAPI。有一些消息表明MService类的新实例没有被创建。当我运行单元测试方法时,我收到以下错误消息 无法获取类MServiceTests的默认构造函数 服务等级 private readonly IRepository _mRepository; public MService(IMRepository mRepository) { _mRepository = mRepository;
private readonly IRepository _mRepository;
public MService(IMRepository mRepository)
{
_mRepository = mRepository;
}
public List<FUser> GetFUser()
{
result = _mRepository.ExecuteCommandReader()
}
public class MServiceTests
{
private readonly IMRepository _mRepository;
private readonly IMService _mService;
public MServiceTests(IMRepository mRepository, IMService mService)
{
_mRepository = mRepository;
_mService = mService;
}
[TestMethod]
public void Get_Users_ReturnsUserList()
{
var resultList = new List<FUser>();
resultList = _mService.GetFUser();
Assert.IsTrue(resultList.Count > 0);
}
}
private readonly IRepository\u mRepository;
公共MService(IMRepository mRepository)
{
_mRepository=mRepository;
}
公共列表GetFUser()
{
结果=\u mRepository.ExecuteCommandReader()
}
测试类
private readonly IRepository _mRepository;
public MService(IMRepository mRepository)
{
_mRepository = mRepository;
}
public List<FUser> GetFUser()
{
result = _mRepository.ExecuteCommandReader()
}
public class MServiceTests
{
private readonly IMRepository _mRepository;
private readonly IMService _mService;
public MServiceTests(IMRepository mRepository, IMService mService)
{
_mRepository = mRepository;
_mService = mService;
}
[TestMethod]
public void Get_Users_ReturnsUserList()
{
var resultList = new List<FUser>();
resultList = _mService.GetFUser();
Assert.IsTrue(resultList.Count > 0);
}
}
公共类MServiceTests
{
私有只读IMRepository\u mRepository;
私有只读IMService(imu mService);
公共MServiceTests(IMRepository mRepository、IMService mService)
{
_mRepository=mRepository;
_mService=mService;
}
[测试方法]
public void Get\u Users\u ReturnsUserList()
{
var resultList=新列表();
结果列表=_mService.GetFUser();
Assert.IsTrue(resultList.Count>0);
}
}
UnityConfig
container.RegisterType<IFService, FService>(new HierarchicalLifetimeManager());
container.RegisterType<IMService, MService>(new HierarchicalLifetimeManager());
container.RegisterType<ITransactionService, TransactionService>(new HierarchicalLifetimeManager());
container.RegisterType<IMRepository, MRepository>();
container.RegisterType(新的层次结构CallifetimeManager());
RegisterType(新的层次结构CallifetimeManager());
RegisterType(新的层次结构CallifetimeManager());
container.RegisterType();
您缺少测试类上的[TestClass]属性(假设您使用的是MSTest框架)。
测试类需要有一个空的默认构造函数,或者根本没有构造函数
对于设置测试,您可以按照以下方式进行安排:
还请记住,您更希望测试代码,而不是DI框架。对于如何对具有依赖性的类进行单元测试,似乎有点困惑 让我们假设被测对象是这样的
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
}
}
最初出现问题的原因是测试运行程序无法创建测试类,因为它(运行程序)不是为执行DI而构建的
为了测试subject类,您需要创建该类的实例,并注入测试被测方法行为所需的任何依赖项
真的没有必要使用容器进行如此小的独立测试你说的“它不工作”是什么意思?我已经更新了问题,错误发生的时间和方式是什么?我需要注册MServiceTests类类型吗?从容器中解决的任何问题都必须首先注册。对问题的良好解释和可行的解决方案。