Ton*_*ile 1 .net c# unit-testing castle-windsor
我是温莎城堡的菜鸟。我正在构建一个使用实体框架 6 和 Castle Windsor 的应用程序,以及一个 MSTest 单元测试类。我的应用程序中有一个实现IWindsorInstaller. 我的单元测试类如下所示:
[TestClass]
public class DatabaseTests {
static readonly WindsorContainer Container = new WindsorContainer();
public DatabaseTests() {
Container.Install( FromAssembly.This() );
}
[TestMethod]
public void FirstTest() {
// Test statements
}
[TestMethod]
public void SecondTest() {
// Test statements
}
// Other tests
}
Run Code Online (Sandbox Code Playgroud)
单元测试项目中还有一个安装程序类,如下所示:
public class TestsInstaller : IWindsorInstaller {
public void Install( IWindsorContainer container, IConfigurationStore store ) {
container.Install( new RecipeManager.RepositoriesInstaller() );
}
}
Run Code Online (Sandbox Code Playgroud)
当我转到“单元测试会话”窗口并尝试运行所有测试时,第一个测试成功,其余的我得到此堆栈跟踪:
无法创建类 UnitTests.DatabaseTests 的实例。错误:Castle.MicroKernel.ComponentRegistrationException:无法注册组件 RecipeManager.DAL.CategoryRepository。已经有一个具有该名称的组件。您想改为修改现有组件吗?如果没有,请确保在 Castle.MicroKernel.SubSystems.Naming.DefaultNamingSubSystem.Register(IHandler handler) at Castle.MicroKernel.DefaultKernel.AddCustomComponent(ComponentModel model) at Castle.MicroKernel.DefaultKernel.Register(IRegistration) 中指定唯一名称.. [] 注册) 在 Castle.Windsor.WindsorContainer.Register(IRegistration[] 注册) 在 RecipeManager.RepositoriesInstaller.Install(IWindsorContainer container, IConfigurationStore store) 在 C:
如果我一次运行一个单元测试,它们都会成功。我打算构建大量测试,所以我真的希望能够一次运行它们。我该如何解决?
在您的测试类中,创建一个字段。
private WindsorContainer Container;
Run Code Online (Sandbox Code Playgroud)
(替换现有的静态字段。)
然后,将其添加到您的测试类中:
[TestInitialize]
public void SetUp()
{
Container = new WindsorContainer();
// register your dependencies
}
[TestCleanup]
public void Cleanup()
{
Container.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
[TestInitialize][TestCleanup]在每次测试之前运行,在每次测试之后运行。
这样,您就不会为每个测试重用相同的容器,也不会尝试向该容器重新注册相同的依赖项。在运行每个测试之前,您将创建一个新容器。如果每个测试都需要相同的依赖项,可以在Setup(). 或者,如果需要,您可以在测试方法中注册它们。
| 归档时间: |
|
| 查看次数: |
4227 次 |
| 最近记录: |