我有一个包含多个项目的解决方案,其中一个项目是我的服务类,它调用了持久性管理器。
我想写一个单元测试如下:
[Test]
public void Create_HappyPath_Success()
{
// Arrange
UnitOfMeasure unitOfMeasure = new UnitOfMeasure();
unitOfMeasure.Code = "Some new unit of measure";
unitOfMeasure.DataOwner = 1;
// Act
this.UoMService.Create(unitOfMeasure); // Fails here as UoMService is null
// Assert something
}
现在,我在这一行得到一个空引用异常:
this.UoMService.Create(unitOfMeasure); // Fails here as UoMService is null
我认为这是因为Castle Windsor没有被调用,因此UoMService没有被实例化。 My Castle Windsor应用程序安装程序在另一个项目中定义,即我的ASP.NET MVC项目。所以我的第一个问题是是否可以重用该安装程序来运行我的单元测试。
现在为了解决这个问题,我通过链接到我的web项目中的安装程序,在单元测试项目中创建了一个新的安装程序。然后我在我的设置中使用了以下代码:
[SetUp]
public void ControllersInstallerTests()
{
this.containerWithControllers = new WindsorContainer();
IoC.Initialize(this.containerWithControllers);
this.containerWithControllers.Install(FromAssembly.This());
}
这次我运行测试时出现以下错误:
SetUp:Castle.Windsor.Configuration.Interpreters.XmlProcessor.ConfigurationProcessingException:处理节点资源时出错FileResource:[] [] ----> Castle.Core.Resource.ResourceException:无法找到文件C:\ Projects \ DavidPM \ Services \ MyProject.Services.ServiceImpl.Test.Unit \ bin \ Debug \ Config \ Windsor.config
问题是为什么它在bin \ Debug文件夹中查找?
作为温莎城堡的新手,我不知道我应该做些什么来挂钩温莎城堡进行单元测试。
答案 0 :(得分:1)
您应该不在单元测试中连接您的IoC容器。在生产过程中,您的IoC容器将解决依赖关系。在单元测试期间,你在测试中创建依赖项 - 通常使用模拟框架,以便您可以单独测试。
答案 1 :(得分:0)
将配置文件复制到输出目录