添加一个全局[Onetimesetup]/[OneTimeteardown]用于跨越多个项目的测试 我使用骑手并跨多个项目运行的集成测试。 在运行测试之前,我需要清除数据库中的所有数据。 我之所以没有添加[

问题描述 投票:0回答:0

事情是,最粗糙的Nunit级别是一个集会,即,它是用一个想法编写的,即要在一个集会中共享资源,而不是在几个集会中共享。

现在,这取决于您要在框架上工作的程度😉当然,您可以编写一些共享代码,这些代码通过不同的测试组件来调用并同步它们,但老实说,这不会很有趣,而您面临的一些令人讨厌的并行性/同步问题的变化很高。

namespace TestsAssemblyA { [SetUpFixture] public class MySetUpClassForA { [OneTimeSetUp] public void RunBeforeAnyTests() => Tests.Shared.CommonThings.ResetDatabase(); } } namespace TestsAssemblyB { [SetUpFixture] public class MySetUpClassForB { [OneTimeSetUp] public void RunBeforeAnyTests() => Tests.Shared.CommonThings.ResetDatabase(); } } namespace Tests.Shared { public static class CommonThings(ILogger logger) { public static void ResetDatabase() { if (IsFirstCallOfSession()) { InnerResetDatabase("connectionStringOfSharedDatabase"); } else { logger.LogInformation("Nothing to do"); } } private bool IsFirstCallOfSession() => ... // good luck! } }

INSTEAD,我建议您对不同的测试组件进行重构,以便它们实际上在不同的测试数据上工作,即您确实是按组件工作的。您仍然可以创建一些通过不同的测试程序集调用的共享代码,但是现在每个调用都会修改不同的数据集/数据库/whyther。

namespace TestsAssemblyA { [SetUpFixture] public class MySetUpClassForA { [OneTimeSetUp] public void RunBeforeAnyTests() => Tests.Shared.CommonThings.ResetDatabase(connectionStringForDatabaseA); } } namespace TestsAssemblyB { [SetUpFixture] public class MySetUpClassForB { [OneTimeSetUp] public void RunBeforeAnyTests() => Tests.Shared.CommonThings.ResetDatabase(connectionStringForDatabaseB); } } namespace Tests.Shared { public static class CommonThings(ILogger logger) { public static void ResetDatabase(string connectionString) => InnerResetDatabase(connectionString); } }

c# .net nunit rider
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.