diff --git a/src/Exercism.Tests/Exercism.Tests.csproj b/src/Exercism.Tests/Exercism.Tests.csproj
index 048e4d0..a0c7a79 100644
--- a/src/Exercism.Tests/Exercism.Tests.csproj
+++ b/src/Exercism.Tests/Exercism.Tests.csproj
@@ -18,4 +18,8 @@
+
+
+
+
diff --git a/src/Exercism.Tests/UseCultureAttribute.cs b/src/Exercism.Tests/UseCultureAttribute.cs
new file mode 100644
index 0000000..84e35d8
--- /dev/null
+++ b/src/Exercism.Tests/UseCultureAttribute.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Globalization;
+using System.Reflection;
+using Xunit.Sdk;
+
+namespace Exercism.Tests
+{
+ [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
+ public class UseCultureAttribute : BeforeAfterTestAttribute
+ {
+ private readonly CultureInfo _culture;
+ private readonly CultureInfo _uiCulture;
+
+ private CultureInfo _originalCulture;
+ private CultureInfo _originalUiCulture;
+
+ public UseCultureAttribute()
+ {
+ _culture = CultureInfo.InvariantCulture;
+ _uiCulture = CultureInfo.InvariantCulture;
+ }
+
+ public UseCultureAttribute(string culture)
+ : this(culture, culture)
+ {
+ }
+
+ public UseCultureAttribute(string culture, string uiCulture)
+ {
+ _culture = new CultureInfo(culture, false);
+ _uiCulture = new CultureInfo(uiCulture, false);
+ }
+
+ public override void Before(MethodInfo methodUnderTest)
+ {
+ _originalCulture = CultureInfo.CurrentCulture;
+ _originalUiCulture = CultureInfo.CurrentUICulture;
+
+ CultureInfo.CurrentCulture = _culture;
+ CultureInfo.CurrentUICulture = _uiCulture;
+ }
+
+ public override void After(MethodInfo methodUnderTest)
+ {
+ CultureInfo.CurrentCulture = _originalCulture;
+ CultureInfo.CurrentUICulture = _originalUiCulture;
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Exercism.Tests.Tests/UseCultureAttributeTests.cs b/tests/Exercism.Tests.Tests/UseCultureAttributeTests.cs
new file mode 100644
index 0000000..a92a2e2
--- /dev/null
+++ b/tests/Exercism.Tests.Tests/UseCultureAttributeTests.cs
@@ -0,0 +1,40 @@
+using System.Globalization;
+using Xunit;
+
+namespace Exercism.Tests.Tests
+{
+ [UseCulture("en-US")]
+ public class UseCultureAttributeTests
+ {
+ [Fact]
+ [UseCulture("nl-NL")]
+ public void SpecifyCulture()
+ {
+ Assert.Equal("nl-NL", CultureInfo.CurrentCulture.Name);
+ Assert.Equal("nl-NL", CultureInfo.CurrentUICulture.Name);
+ }
+
+ [Fact]
+ [UseCulture("nl-NL", "nl-BE")]
+ public void SpecifyCultureAndUiCulture()
+ {
+ Assert.Equal("nl-NL", CultureInfo.CurrentCulture.Name);
+ Assert.Equal("nl-BE", CultureInfo.CurrentUICulture.Name);
+ }
+
+ [Fact]
+ [UseCulture]
+ public void DontSpecifyCulture()
+ {
+ Assert.Equal(CultureInfo.InvariantCulture, CultureInfo.CurrentCulture);
+ Assert.Equal(CultureInfo.InvariantCulture, CultureInfo.CurrentUICulture);
+ }
+
+ [Fact]
+ public void InheritCultureFromClass()
+ {
+ Assert.Equal("en-US", CultureInfo.CurrentCulture.Name);
+ Assert.Equal("en-US", CultureInfo.CurrentUICulture.Name);
+ }
+ }
+}