当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-CallingtheDisposeMethodonanAutoFixtureCustom共享

时间:2023-04-10 15:54:24 C#

测试完成后立即删除这个数据库对我很有帮助。由于数据库是在自定义构造函数中创建的,我认为删除它的最佳位置是dispose方法。我认为的代码是:internalclassProjectRepositoryCustomization:ICustomization{privatereadonlyString_dbLocation;publicProjectRepositoryCustomization(){vartempDbLocation=Path.Combine(Path.GetTempPath(),"TempDbToDelete");如果(!Directory.Exists(temp)DbLocation){Directory.CreateDirectory(tempDbLocation);}_dbLocation=Path.Combine(tempDbLocation,Guid.NewGuid().ToString("N")+".sdf");}publicvoidCustomize(IFixturefixture){DataContextConfiguration.database=_dbLocation;vardataContextFactory=newBaseDataContextFactory();varprojRepository=newProjectRepository(dataContextFactory);fixture.Register(()=>projRepository);}publicvoidDispose(){if(File.Exists(_dbLocation)){File.Delete(_dbLocation);有没有可能做类似的事情?正如@RubenBartelink在评论中指出的那样,这是可能的。但是,我会推荐一种不同的方法,这就是原因。管理对象的生命周期是您通常希望能够使用IoC容器完成的事情。然而,AutoFixture,虽然它看起来像一个IoC容器,但实际上并不是一个容器:AutoFixture与DIContainers有很多相似之处。它支持自动装配,并且可以配置为以许多有趣的方式创建实例。但是,由于侧重点不同,它会比DI容器做得更好,也可能做得更差。AutoFixture的主要目标是在一些可配置范围内轻松创建匿名测试数据。它的API专注于允许程序员自定义测试数据的生成方式,而不是何时生成,因为它假设仅在测试环境中使用:AutoFixture在生命周期管理方面较弱。夹具预计不会存在超过一个测试用例,因此模拟除Transient和Singleton之外的任何其他生活方式没有意义。[…]不必,因为它不是DI容器。另一方面,测试框架非常擅长管理测试装置的生命周期。由于您所描述的通常是管理集成测试上下文的一部分,因此我会在执行夹具中的所有测试之前和之后运行它。例如:[TestFixture]publicclassWithDatabaseContext{privatestringdbLocation;privateBaseDataContextFactorydataContextFactoryprotectedBaseDataContextFactoryDataContextFactory{get{returnthis.dataContextFactory;}}[TestFixtureSetUp]publicvoidFixtureInit(){//初始化dbLocation//初始化dataContextFactory}[TestFixtureTearDown]publicvoidFixtureDispose(){//删除dbLocation的文件}}然后你的测试可以继承上下文并使用它来配置AutoFixture:[TestFixture]publicvoidSomeTest:WithDatabaseContext{privateIFixturefixture;[设置]publicvoidInit(){this.fixture=newFixture();this.fixture.Register(()=>newProjectRepository(base.DataContextFactory));}[Test]publicvoidDoing_something_should_return_something_else(){//...}}在这种情况下在这种情况下,利用测试框架来管理临时数据库的生命周期可以清楚地传达其在测试环境中的边界。在我看来,将它隐藏在AutoFixture自定义中会使其不那么明显,而且可以说更难使用。以上就是C#学习教程:AutoFixture自定义调用Dispose方法分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: