<PackageReference Include="NUnit" Version="3.4.1" />

CultureAttribute

CultureAttribute is used to mark a test fixture or an individual method as applying to a particular Culture only.
using NUnit.Framework.Interfaces; using NUnit.Framework.Internal; using System; using System.Globalization; namespace NUnit.Framework { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public class CultureAttribute : IncludeExcludeAttribute, IApplyToTest { private CultureDetector cultureDetector = new CultureDetector(); private CultureInfo currentCulture = CultureInfo.CurrentCulture; public CultureAttribute() { } public CultureAttribute(string cultures) : base(cultures) { } public void ApplyToTest(Test test) { if (test.RunState != 0 && !IsCultureSupported()) { test.RunState = RunState.Skipped; test.Properties.Set("_SKIPREASON", base.Reason); } } private bool IsCultureSupported() { if (base.Include != null && !cultureDetector.IsCultureSupported(base.Include)) { base.Reason = $"""{base.Include}"; return false; } if (base.Exclude != null && cultureDetector.IsCultureSupported(base.Exclude)) { base.Reason = $"""{base.Exclude}"; return false; } return true; } public bool IsCultureSupported(string culture) { culture = culture.Trim(); if (culture.IndexOf(',') >= 0) { if (IsCultureSupported(culture.Split(new char[1] { ',' }))) return true; } else if (currentCulture.Name == culture || currentCulture.TwoLetterISOLanguageName == culture) { return true; } return false; } public bool IsCultureSupported(string[] cultures) { foreach (string culture in cultures) { if (IsCultureSupported(culture)) return true; } return false; } } }