using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using PiiRedaction.Core.Configuration; using PiiRedaction.Infrastructure.Onnx; namespace PiiRedaction.Tests.Shared; /// /// Reuses a single per fixture for performance. /// Skips all tests in the class when the ONNX model is missing or cannot be loaded. /// public abstract class RealNerModelFixture { protected OnnxNerModelRunner Runner { get; private set; } = null!; protected string ModelPath { get; private set; } = null!; [OneTimeSetUp] public void OneTimeSetUpRealModel() { ModelPath = RealNerModelPaths.ResolveRepoModelPath(); if (!File.Exists(ModelPath)) { Assert.Ignore(RealNerModelPaths.ModelMissingMessage); } var options = Options.Create(new PiiRedactionOptions { OnnxModelPath = ModelPath }); Runner = new OnnxNerModelRunner(options, NullLogger.Instance); if (!Runner.IsModelAvailable) { Runner.Dispose(); Assert.Ignore(RealNerModelPaths.ModelMissingMessage); } } [OneTimeTearDown] public void OneTimeTearDownRealModel() { Runner?.Dispose(); } }