Skip to content

Commit 3ba57fe

Browse files
PandaMagnusMichael CurnKeboo
authored
Support async test blocks (#51)
* Add async support via new TestBuilder.AddAsyncTestBlock method * Add TestCase.ExecuteAsync() to facilitate async/await pattern *NOTE: TestCase.Execute is now considered legacy. It will be deprecated some time in the future. * Under the cover changes to selectively execute regular non-awaitable test blocks as normal, but to await newly added awaitable test blocks. Co-authored-by: Kevin B <[email protected]> * Since ExecuteAsync returns Task, update sync wrapper to use .Wait --------- Co-authored-by: Michael Curn <[email protected]> Co-authored-by: Kevin B <[email protected]>
1 parent 2a30983 commit 3ba57fe

File tree

12 files changed

+226
-73
lines changed

12 files changed

+226
-73
lines changed

ExampleTests/ExampleTests/ExampleTests.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<PackageReference Include="IntelliTect.TestTools.TestFramework" Version="1.2.1" />
1818
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
1919
<PackageReference Include="Selenium.WebDriver" Version="4.8.0" />
20-
<PackageReference Include="System.Text.Json" Version="8.0.4" />
20+
<PackageReference Include="System.Text.Json" Version="8.0.5" />
2121
<PackageReference Include="xunit" Version="2.8.1" />
2222
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
2323
<PrivateAssets>all</PrivateAssets>

IntelliTect.TestTools.TestFramework.Tests/IntelliTect.TestTools.TestFramework.Tests.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net6.0</TargetFramework>
5-
<LangVersion>11.0</LangVersion>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<LangVersion>latest</LangVersion>
66
<Nullable>enable</Nullable>
77
<NoWarn>
88
CA1303;

IntelliTect.TestTools.TestFramework.Tests/TestBuilderTests/PositiveConditions/LoggerTests.cs

+44-22
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,91 @@
1-
using Xunit;
1+
using System.Threading.Tasks;
2+
using Xunit;
23

34
namespace IntelliTect.TestTools.TestFramework.Tests.TestBuilderTests
45
{
56
public class LoggerTests
67
{
78
[Fact]
8-
public void DefaultLoggerIsAddedOnCreate()
9+
public async Task DefaultLoggerIsAddedOnCreate()
910
{
1011
// Arrange
1112
TestCase tc = new TestBuilder()
1213
.AddTestBlock<DefaultLogBlock>()
1314
.Build();
1415

15-
// Act / Assert
16-
tc.Execute();
16+
// Act
17+
await tc.ExecuteAsync();
18+
19+
// Assert
20+
Assert.True(tc.Passed);
1721
}
1822

1923
[Fact]
20-
public void RemovedLoggerDoesNotThrowWhenAttemptingToActivateProp()
24+
public async Task RemovedLoggerDoesNotThrowWhenAttemptingToActivateProp()
2125
{
2226
// Arrange
2327
TestCase tc = new TestBuilder()
2428
.RemoveLogger()
2529
.AddTestBlock<RemovedLogBlockProp>()
2630
.Build();
2731

28-
// Act / Assert
29-
tc.Execute();
32+
// Act
33+
await tc.ExecuteAsync();
34+
35+
// Assert
36+
Assert.True(tc.Passed);
3037
}
3138

3239
[Fact]
33-
public void RemovedLoggerDoesNotThrowWhenAttemptingToActivateCtor()
40+
public async Task RemovedLoggerDoesNotThrowWhenAttemptingToActivateCtor()
3441
{
3542
// Arrange
3643
TestCase tc = new TestBuilder()
3744
.RemoveLogger()
3845
.AddTestBlock<RemovedLogBlockCtor>()
3946
.Build();
4047

41-
// Act / Assert
42-
tc.Execute();
48+
// Act
49+
await tc.ExecuteAsync();
50+
51+
// Assert
52+
Assert.True(tc.Passed);
4353
}
4454

4555
[Fact]
46-
public void RemovedLoggerDoesNotThrowWhenAttemptingToActivateExecuteArg()
56+
public async Task RemovedLoggerDoesNotThrowWhenAttemptingToActivateExecuteArg()
4757
{
4858
// Arrange
4959
TestCase tc = new TestBuilder()
5060
.RemoveLogger()
5161
.AddTestBlock<RemovedLogBlockExecuteArg>()
5262
.Build();
5363

54-
// Act / Assert
55-
tc.Execute();
64+
// Act
65+
await tc.ExecuteAsync();
66+
67+
// Assert
68+
Assert.True(tc.Passed);
5669
}
5770

5871
[Fact]
59-
public void CustomLoggerAddsWithoutError()
72+
public async Task CustomLoggerAddsWithoutError()
6073
{
6174
// Arrange
6275
TestCase tc = new TestBuilder()
6376
.AddLogger<CustomLogger>()
6477
.AddTestBlock<CustomLogBlock>()
6578
.Build();
6679

67-
// Act / Assert
68-
tc.Execute();
80+
// Act
81+
await tc.ExecuteAsync();
82+
83+
// Assert
84+
Assert.True(tc.Passed);
6985
}
7086

7187
[Fact]
72-
public void RemovingLoggerTwiceDoesNotThrow()
88+
public async Task RemovingLoggerTwiceDoesNotThrow()
7389
{
7490
// Arrange
7591
TestCase tc = new TestBuilder()
@@ -78,12 +94,15 @@ public void RemovingLoggerTwiceDoesNotThrow()
7894
.AddTestBlock<RemovedLogBlockProp>()
7995
.Build();
8096

81-
// Act / Assert
82-
tc.Execute();
97+
// Act
98+
await tc.ExecuteAsync();
99+
100+
// Assert
101+
Assert.True(tc.Passed);
83102
}
84103

85104
[Fact]
86-
public void AddingLoggerThanRemovingDoesNotThrow()
105+
public async Task AddingLoggerThanRemovingDoesNotThrow()
87106
{
88107
// Arrange
89108
TestCase tc = new TestBuilder()
@@ -92,8 +111,11 @@ public void AddingLoggerThanRemovingDoesNotThrow()
92111
.AddTestBlock<RemovedLogBlockProp>()
93112
.Build();
94113

95-
// Act / Assert
96-
tc.Execute();
114+
// Act
115+
await tc.ExecuteAsync();
116+
117+
// Assert
118+
Assert.True(tc.Passed);
97119
}
98120
}
99121

IntelliTect.TestTools.TestFramework.Tests/TestBuilderTests/PositiveConditions/TestCasePropertyTests.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System;
33
using System.Collections.Generic;
44
using System.Text;
5+
using System.Threading.Tasks;
56
using Xunit;
67

78
namespace IntelliTect.TestTools.TestFramework.Tests.TestBuilderTests
@@ -136,7 +137,7 @@ public void TestCasePassedDefaultsToFalse()
136137
}
137138

138139
[Fact]
139-
public void TestCasePassedRemainsFalseOnFailure()
140+
public async Task TestCasePassedRemainsFalseOnFailure()
140141
{
141142
// Arrange
142143
TestCase tc = new TestBuilder()
@@ -145,14 +146,14 @@ public void TestCasePassedRemainsFalseOnFailure()
145146
.Build();
146147

147148
// Act
148-
Assert.Throws<TestCaseException>(() => tc.Execute());
149+
await Assert.ThrowsAsync<TestCaseException>(() => tc.ExecuteAsync());
149150

150151
// Assert
151152
Assert.False(tc.Passed);
152153
}
153154

154155
[Fact]
155-
public void TestCasePassedTurnsTrueOnSuccessfulExecution()
156+
public async Task TestCasePassedTurnsTrueOnSuccessfulExecution()
156157
{
157158
// Arrange
158159
TestCase tc = new TestBuilder()
@@ -161,7 +162,7 @@ public void TestCasePassedTurnsTrueOnSuccessfulExecution()
161162
.Build();
162163

163164
// Act
164-
tc.Execute();
165+
await tc.ExecuteAsync();
165166

166167
// Assert
167168
Assert.True(tc.Passed);

IntelliTect.TestTools.TestFramework.Tests/TestCaseTests/FinallyExecutionTests.cs

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using IntelliTect.TestTools.TestFramework.Tests.TestData.Dependencies;
22
using IntelliTect.TestTools.TestFramework.Tests.TestData.TestBlocks;
33
using System;
4+
using System.Threading.Tasks;
45
using Xunit;
56

67
namespace IntelliTect.TestTools.TestFramework.Tests.TestCaseTests
@@ -9,7 +10,7 @@ public class FinallyExecutionTests
910
{
1011

1112
[Fact]
12-
public void FinallyBlockThrowsExpectedExceptionWhenNotOverridingDefaultFinallyBehavior()
13+
public async Task FinallyBlockThrowsExpectedExceptionWhenNotOverridingDefaultFinallyBehavior()
1314
{
1415
// Arrange
1516
TestCase tc = new TestBuilder()
@@ -19,7 +20,7 @@ public void FinallyBlockThrowsExpectedExceptionWhenNotOverridingDefaultFinallyBe
1920
.Build();
2021

2122
// Act
22-
var ex = Assert.Throws<AggregateException>(() => tc.Execute());
23+
var ex = await Assert.ThrowsAsync<AggregateException>(() => tc.ExecuteAsync());
2324

2425
// Assert
2526
Assert.NotNull(ex.InnerExceptions);
@@ -31,7 +32,7 @@ public void FinallyBlockThrowsExpectedExceptionWhenNotOverridingDefaultFinallyBe
3132
}
3233

3334
[Fact]
34-
public void TestBlockAndFinallyBlockThrowsExpectedExceptionWhenNotOverridingDefaultFinallyBehavior()
35+
public async Task TestBlockAndFinallyBlockThrowsExpectedExceptionWhenNotOverridingDefaultFinallyBehavior()
3536
{
3637
// Arrange
3738
TestCase tc = new TestBuilder()
@@ -41,7 +42,7 @@ public void TestBlockAndFinallyBlockThrowsExpectedExceptionWhenNotOverridingDefa
4142
.Build();
4243

4344
// Act
44-
var ex = Assert.Throws<AggregateException>(() => tc.Execute());
45+
var ex = await Assert.ThrowsAsync<AggregateException>(() => tc.ExecuteAsync());
4546

4647
// Assert
4748
Assert.NotNull(ex.InnerExceptions);
@@ -53,7 +54,7 @@ public void TestBlockAndFinallyBlockThrowsExpectedExceptionWhenNotOverridingDefa
5354
}
5455

5556
[Fact]
56-
public void FinallyBlockDoesNotThrowExceptionWhenOverridingDefaultFinallyBehavior()
57+
public async Task FinallyBlockDoesNotThrowExceptionWhenOverridingDefaultFinallyBehavior()
5758
{
5859
// Arrange
5960
TestCase tc = new TestBuilder()
@@ -64,14 +65,14 @@ public void FinallyBlockDoesNotThrowExceptionWhenOverridingDefaultFinallyBehavio
6465
tc.ThrowOnFinallyBlockException = false;
6566

6667
// Act
67-
tc.Execute();
68+
await tc.ExecuteAsync();
6869

6970
// Assert
7071
Assert.True(tc.Passed, "Test case did not get marked as Passed when we expected it.");
7172
}
7273

7374
[Fact]
74-
public void OnlyTestBlockThrowsExpectedExceptionWhenOverridingDefaultFinallyBehavior()
75+
public async Task OnlyTestBlockThrowsExpectedExceptionWhenOverridingDefaultFinallyBehavior()
7576
{
7677
// Arrange
7778
TestCase tc = new TestBuilder()
@@ -82,7 +83,7 @@ public void OnlyTestBlockThrowsExpectedExceptionWhenOverridingDefaultFinallyBeha
8283
tc.ThrowOnFinallyBlockException = false;
8384

8485
// Act
85-
Assert.Throws<TestCaseException>(() => tc.Execute());
86+
await Assert.ThrowsAsync<TestCaseException>(() => tc.ExecuteAsync());
8687

8788
// Assert
8889
Assert.False(tc.Passed, "Test case did not get marked as Failed when we expected it.");

0 commit comments

Comments
 (0)