Skip to content

Commit 1a41ed9

Browse files
Refactor out repeated code in unit tests
1 parent ee89030 commit 1a41ed9

File tree

5 files changed

+44
-61
lines changed

5 files changed

+44
-61
lines changed

src/Stravaig.ShortCode.Tests/CodeGeneratorTestsBase.cs

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,23 @@
44
using System.Linq;
55
using System.Runtime.CompilerServices;
66
using System.Threading.Tasks;
7+
using NUnit.Framework;
78
using Shouldly;
89

910
namespace Stravaig.ShortCode.Tests
1011
{
11-
public class CodeGeneratorTestsBase
12+
public abstract class CodeGeneratorTestsBase
1213
{
14+
private const int ShortRunSize = 1024 * 4;
1315
private const int RunSize = 1024 * 1024 * 4;
16+
17+
protected abstract IShortCodeGenerator GetGenerator([CallerMemberName] string testName = null);
1418

15-
private void GenerateLots(IShortCodeGenerator gen, ulong[] result)
16-
{
17-
int count = result.Length;
18-
for (int i = 0; i < count; i++)
19-
{
20-
result[i] = gen.GetNextCode();
21-
}
22-
}
23-
24-
protected void MultiThreadStressTest(IShortCodeGenerator gen)
19+
[Test]
20+
[Category("LongStressTest")]
21+
public void MultiThreadStressTest()
2522
{
23+
var gen = GetGenerator();
2624
var threadCount = Environment.ProcessorCount * 2;
2725
var tasks = new List<Task<ulong[]>>(threadCount);
2826
for (int i = 0; i < threadCount; i++)
@@ -52,15 +50,30 @@ protected void MultiThreadStressTest(IShortCodeGenerator gen)
5250
CheckAccuracy(allResults);
5351
}
5452

55-
protected void SingleThreadStressTest(IShortCodeGenerator gen)
53+
[Test]
54+
[Category("LongStressTest")]
55+
public void SingleThreadStressTest()
5656
{
57+
var gen = GetGenerator();
5758
var result = new ulong[RunSize];
59+
SingleThreadStressTestImpl(gen, result);
60+
}
61+
62+
[Test]
63+
public void ShortSingleThreadStressTest()
64+
{
65+
var gen = GetGenerator();
66+
var result = new ulong[ShortRunSize];
67+
SingleThreadStressTestImpl(gen, result);
68+
}
69+
70+
private void SingleThreadStressTestImpl(IShortCodeGenerator gen, ulong[] result)
71+
{
5872
Stopwatch sw = new Stopwatch();
5973
sw.Start();
6074
GenerateLots(gen, result);
6175
sw.Stop();
6276
ResultReadOut(result.Length, sw);
63-
6477
CheckAccuracy(result);
6578
}
6679

@@ -74,6 +87,15 @@ private static void CheckAccuracy(IEnumerable<ulong> result)
7487
distinctCount.ShouldBe(totalCount);
7588
}
7689

90+
private void GenerateLots(IShortCodeGenerator gen, ulong[] result)
91+
{
92+
int count = result.Length;
93+
for (int i = 0; i < count; i++)
94+
{
95+
result[i] = gen.GetNextCode();
96+
}
97+
}
98+
7799
private void ResultReadOut(int totalCount, Stopwatch sw, int? index = null, [CallerMemberName]string caller = null)
78100
{
79101
var elapsedMs = (double)sw.ElapsedMilliseconds;
Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
1+
using System.Runtime.CompilerServices;
12
using NUnit.Framework;
23

34
namespace Stravaig.ShortCode.Tests
45
{
56
[TestFixture]
67
public class CryptographicallyRandomCodeGeneratorTests : CodeGeneratorTestsBase
78
{
8-
[Test]
9-
public void SingleThreadStressTest()
9+
protected override IShortCodeGenerator GetGenerator([CallerMemberName]string testName = null)
1010
{
11-
var gen = new CryptographicallyRandomCodeGenerator();
12-
SingleThreadStressTest(gen);
13-
}
14-
15-
[Test]
16-
[Category("LongStressTest")]
17-
public void MultiThreadStressTest()
18-
{
19-
var gen = new CryptographicallyRandomCodeGenerator();
20-
MultiThreadStressTest(gen);
11+
return new CryptographicallyRandomCodeGenerator();
2112
}
2213
}
2314
}

src/Stravaig.ShortCode.Tests/GuidCodeGeneratorTests.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,9 @@ namespace Stravaig.ShortCode.Tests
55
[TestFixture]
66
public class GuidCodeGeneratorTests : CodeGeneratorTestsBase
77
{
8-
[Test]
9-
public void SingleThreadStressTest()
8+
protected override IShortCodeGenerator GetGenerator(string testName = null)
109
{
11-
var gen = new GuidCodeGenerator();
12-
SingleThreadStressTest(gen);
13-
}
14-
15-
[Test]
16-
[Category("LongStressTest")]
17-
public void MultiThreadStressTest()
18-
{
19-
var gen = new GuidCodeGenerator();
20-
MultiThreadStressTest(gen);
10+
return new GuidCodeGenerator();
2111
}
2212
}
2313
}

src/Stravaig.ShortCode.Tests/RandomCodeGeneratorTests.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,9 @@ namespace Stravaig.ShortCode.Tests
55
[TestFixture]
66
public class RandomCodeGeneratorTests : CodeGeneratorTestsBase
77
{
8-
[Test]
9-
public void SingleThreadStressTest()
8+
protected override IShortCodeGenerator GetGenerator(string testName = null)
109
{
11-
var gen = new RandomCodeGenerator();
12-
SingleThreadStressTest(gen);
13-
}
14-
15-
[Test]
16-
[Category("LongStressTest")]
17-
public void MultiThreadStressTest()
18-
{
19-
var gen = new RandomCodeGenerator();
20-
MultiThreadStressTest(gen);
10+
return new RandomCodeGenerator();
2111
}
2212
}
2313
}

src/Stravaig.ShortCode.Tests/SequentialCodeGeneratorTests.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,9 @@ public void SeedZero_GetNextCode_IncrementsByOneEachTime()
1515
gen.GetNextCode().ShouldBe(3UL);
1616
}
1717

18-
[Test]
19-
public void SingleThreadStressTest()
18+
protected override IShortCodeGenerator GetGenerator(string testName = null)
2019
{
21-
var gen = new SequentialCodeGenerator(0);
22-
SingleThreadStressTest(gen);
23-
}
24-
25-
[Test]
26-
[Category("LongStressTest")]
27-
public void MultiThreadStressTest()
28-
{
29-
var gen = new SequentialCodeGenerator(0);
30-
MultiThreadStressTest(gen);
20+
return new SequentialCodeGenerator(0);
3121
}
3222
}
3323
}

0 commit comments

Comments
 (0)