diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 490362d..8f53962 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -70,6 +70,11 @@ jobs:
- name: Restore dependencies
run: dotnet restore
+ - name: Test
+ shell: bash
+ run: |
+ dotnet test --no-restore --configuration ${{ matrix.configuration }}
+
- name: Build
shell: bash
run: |
diff --git a/PostCodeGUI.sln b/PostCodeGUI.sln
index e3aa5f5..d47f62e 100644
--- a/PostCodeGUI.sln
+++ b/PostCodeGUI.sln
@@ -5,6 +5,8 @@ VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PostCodeSerialMonitor", "PostCodeSerialMonitor\PostCodeSerialMonitor.csproj", "{EBB8E46D-05A6-46CF-9C53-7DF64086F492}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PostCodeSerialMonitor.Tests", "PostCodeSerialMonitor.Tests\PostCodeSerialMonitor.Tests.csproj", "{D629C06E-3323-47AF-83C1-B7A21D978ED2}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,18 @@ Global
{EBB8E46D-05A6-46CF-9C53-7DF64086F492}.Release|x64.Build.0 = Release|Any CPU
{EBB8E46D-05A6-46CF-9C53-7DF64086F492}.Release|x86.ActiveCfg = Release|Any CPU
{EBB8E46D-05A6-46CF-9C53-7DF64086F492}.Release|x86.Build.0 = Release|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Debug|x64.Build.0 = Debug|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Debug|x86.Build.0 = Debug|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Release|x64.ActiveCfg = Release|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Release|x64.Build.0 = Release|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Release|x86.ActiveCfg = Release|Any CPU
+ {D629C06E-3323-47AF-83C1-B7A21D978ED2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/PostCodeSerialMonitor.Tests/PostCodeSerialMonitor.Tests.csproj b/PostCodeSerialMonitor.Tests/PostCodeSerialMonitor.Tests.csproj
index f09e311..2bdb604 100644
--- a/PostCodeSerialMonitor.Tests/PostCodeSerialMonitor.Tests.csproj
+++ b/PostCodeSerialMonitor.Tests/PostCodeSerialMonitor.Tests.csproj
@@ -4,7 +4,9 @@
net9.0
enable
enable
+ true
false
+ false
diff --git a/PostCodeSerialMonitor.Tests/SemanticVersionTests.cs b/PostCodeSerialMonitor.Tests/SemanticVersionTests.cs
new file mode 100644
index 0000000..aa4faa9
--- /dev/null
+++ b/PostCodeSerialMonitor.Tests/SemanticVersionTests.cs
@@ -0,0 +1,93 @@
+using System.Collections;
+using PostCodeSerialMonitor.Models;
+
+namespace PostCodeSerialMonitor.Tests;
+public class SemanticVersionTestDataGenerator : IEnumerable