gpt4 book ai didi

c# - 在单元测试类中使用 CaSTLe Windsor

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:37 32 4
gpt4 key购买 nike

我是温莎城堡的菜鸟。我正在构建一个使用 Entity Framework 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
}

单元测试项目中还有一个安装程序类,如下所示:

public class TestsInstaller : IWindsorInstaller {
public void Install( IWindsorContainer container, IConfigurationStore store ) {
container.Install( new RecipeManager.RepositoriesInstaller() );
}
}

当我转到“单元测试 session ”窗口并尝试运行所有测试时,第一个成功,其余的我得到这个堆栈跟踪:

Unable to create instance of class UnitTests.DatabaseTests. Error: Castle.MicroKernel.ComponentRegistrationException: Component RecipeManager.DAL.CategoryRepository could not be registered. There is already a component with that name. Did you want to modify the existing component instead? If not, make sure you specify a unique name.. at Castle.MicroKernel.SubSystems.Naming.DefaultNamingSubSystem.Register(IHandler handler) at Castle.MicroKernel.DefaultKernel.AddCustomComponent(ComponentModel model) at Castle.MicroKernel.DefaultKernel.Register(IRegistration[] registrations) at Castle.Windsor.WindsorContainer.Register(IRegistration[] registrations) at RecipeManager.RepositoriesInstaller.Install(IWindsorContainer container, IConfigurationStore store) in C:\Users\Tony\documents\visual studio 2015\Projects\RecipeManager\ManageRecipes\RepositoriesInstaller.cs:line 10 at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers, DefaultComponentInstaller scope) at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers) at UnitTests.TestsInstaller.Install(IWindsorContainer container, IConfigurationStore store) in C:\Users\Tony\documents\visual studio 2015\Projects\RecipeManager\UnitTests\TestsInstaller.cs:line 8 at Castle.Windsor.Installer.AssemblyInstaller.Install(IWindsorContainer container, IConfigurationStore store) at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers, DefaultComponentInstaller scope) at Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers) at UnitTests.DatabaseTests..ctor() in C:\Users\Tony\documents\visual studio 2015\Projects\RecipeManager\UnitTests\DatabaseTests.cs:line 17

如果我一次运行一个单元测试,它们都会成功。我打算构建大量测试,所以我真的很希望能够同时运行它们。我该如何解决这个问题?

最佳答案

在您的测试类中,创建一个字段。

private WindsorContainer Container;

(替换现有的静态字段。)

然后,将其添加到您的测试类中:

[TestInitialize]
public void SetUp()
{
Container = new WindsorContainer();
// register your dependencies
}

[TestCleanup]
public void Cleanup()
{
Container.Dispose();
}

[TestInitialize] 在每次测试之前运行,[TestCleanup] 在每次测试之后运行。
这样,您就不会为每个测试重复使用相同的容器,也不会尝试向该容器重新注册相同的依赖项。在运行每个测试之前,您将创建一个新容器。如果每个测试都需要相同的依赖项,您可以在 Setup() 中注册它们。或者,如果需要,您可以在测试方法中注册它们。

关于c# - 在单元测试类中使用 CaSTLe Windsor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36923926/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com