We will create the test cases for a ET Core 1.1 application named FizzBuzz. Here’s how it goes. If a number is divisible by 3 then you will call out Fizz. If a number is divisible by 5 then you will call out Buzz. If a number is divisible by 3 and 5 then you will call out FizzBuzz. Otherwise, you will just call out the number itself.
Here are some examples:
2 | 12 |
4 | 1 2 Fizz 4 |
5 | 1 2 Fizz 4 Buzz |
15 | 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Fuzz 11 Fizz 13 14 FizzBuzz |
The above table would represent our four test cases.
Directory & file structure
Create the following directory structure in your workspace directory:Creating the business logic project
There are a number of built-in templates that are available to the developer. You con view these templates by typing the following in a terminal window:
dotnet new template --list
Similarly, in a command line while the test/FizzBuzzTests directory, create the test project files by executing the following command:dotnet new classlib
If you open the root FizzBuzz folder in Visual Studio Code, your directories & files will look like this:dotnet new xunit
Rename the src/FizzBuzzLibrary/Class1.cs file to src/FizzBuzzLibrary/FizzBuzzMaster.cs. Open src/FizzBuzzLibrary/FizzBuzzMaster.cs in the editor and change the class name from Class1 to FizzBuzzMaster.
Similarly, rename test/FizzBuzzTests/UnitTest1.cs to test/FizzBuzzTests/FizzBuzzTestsMaster.cs. Open test/FizzBuzzTests/FizzBuzzTestsMaster.cs in the editor and change the class name from UnitTest1 to FizzBuzzTestsMaster.
Open the src/FizzBuzzLibrary/FizzBuzzMaster.cs file in the editor. Make sure the namespace is FizzBuzzLibrary and add the following method to the class:
public string GetResult(int nmbr) {You will notice that the above method is destined to fail. This is the fundamental principal of test driven development whereby methods are initially built to fail.
string result = "";
return result;
}
We should create our test cases. Open test/FizzBuzzTests/FizzBuzzTestsMaster.cs in the editor and replace the Test1() method with the following four test cases:
[Fact]Import the following namespace at the top of the above file test/FizzBuzzTests/FizzBuzzTestsMaster.cs:
public void Given2Result12() {
FizzBuzzMaster fbm = new FizzBuzzMaster();
var expected = "1 2 ";
var actual = fbm.GetResult(2);
Assert.Equal(expected, actual);
}
[Fact]
public void Given4Result12fizz4() {
FizzBuzzMaster fbm = new FizzBuzzMaster();
var expected = "1 2 Fizz 4 ";
var actual = fbm.GetResult(4);
Assert.Equal(expected, actual);
}
[Fact]
public void Given5Result12fizz4buzz() {
FizzBuzzMaster fbm = new FizzBuzzMaster();
var expected = "1 2 Fizz 4 Buzz ";
var actual = fbm.GetResult(5);
Assert.Equal(expected, actual);
}
[Fact]
public void Given15Result12fizz4buzzfizz78fizzbuzz11fizzfizz1314fizzbuzz() {
FizzBuzzMaster fbm = new FizzBuzzMaster();
var expected = "1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz ";
var actual = fbm.GetResult(15);
Assert.Equal(expected, actual);
}
using FizzBuzzLibrary;
<ProjectReference Include="..\..\src\FizzBuzzLibrary\FizzBuzzLibrary.csproj" />
The <ItemGroup> XML block in file test/FizzBuzzTests/FizzBuzzTests.csproj now looks like this:
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
<PackageReference Include="xunit" Version="2.2.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
<ProjectReference Include="..\..\src\FizzBuzzLibrary\FizzBuzzLibrary.csproj" />
</ItemGroup>
Running our tests
We have built our preliminary business logic and test cases. In addition, we referenced our business logic application into our test cases application. Now let us test things out.To restore and build our Library application, execute the following commands from within the root FizzBuzz directory:
dotnet restore src/FizzBuzzLibraryIt is now time to run the actual tests. This is done by executing the following command also from within the root FizzBuss directory:
dotnet build src/FizzBuzzLibrary
dotnet restore test/FizzBuzzTests
dotnet build test/FizzBuzzTests
dotnet test test/FizzBuzzTests/FizzBuzzTests.csproj
Build started, please wait...Let’s fix all four failed tests by fixing our GetResult() method in src/FizzBuzzLibrary/FizzBuzzMaster.cs. Replace the GetResult() method with the following code:
Build completed.
Test run for F:\4870\FizzBuzz\test\FizzBuzzTests\bin\Debug\netcoreapp1.1\FizzBuzzTests.dll(.NETCoreApp,Version=v1.1)
Microsoft (R) Test Execution Command Line Tool Version 15.0.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
[xUnit.net 00:00:00.5936585] Discovering: FizzBuzzTests
[xUnit.net 00:00:00.7169039] Discovered: FizzBuzzTests
[xUnit.net 00:00:00.7640234] Starting: FizzBuzzTests
[xUnit.net 00:00:00.9084551] FizzBuzzTests.FizzBuzzTestsMaster.Given4Result12fizz4 [FAIL]
[xUnit.net 00:00:00.9105612] Assert.Equal() Failure
[xUnit.net 00:00:00.9107578] ↓ (pos 0)
[xUnit.net 00:00:00.9108391] Expected: 1 2 Fizz 4
[xUnit.net 00:00:00.9109069] Actual:
[xUnit.net 00:00:00.9109578] ↑ (pos 0)
[xUnit.net 00:00:00.9125774] Stack Trace:
[xUnit.net 00:00:00.9143555] F:\4870\FizzBuzz\test\FizzBuzzTests\FizzBuzzTestsMaster.cs(22,0): at FizzBuzzTests.FizzBuzzTestsMaster.Given4Result12fizz4()
[xUnit.net 00:00:00.9308443] FizzBuzzTests.FizzBuzzTestsMaster.Given2Result12 [FAIL]
[xUnit.net 00:00:00.9309901] Assert.Equal() Failure
[xUnit.net 00:00:00.9310410] ↓ (pos 0)
[xUnit.net 00:00:00.9310890] Expected: 1 2
[xUnit.net 00:00:00.9311260] Actual:
[xUnit.net 00:00:00.9312167] ↑ (pos 0)
[xUnit.net 00:00:00.9313206] Stack Trace:
[xUnit.net 00:00:00.9314166] F:\4870\FizzBuzz\test\FizzBuzzTests\FizzBuzzTestsMaster.cs(14,0): at FizzBuzzTests.FizzBuzzTestsMaster.Given2Result12()
[xUnit.net 00:00:00.9319873] FizzBuzzTests.FizzBuzzTestsMaster.Given5Result12fizz4buzz [FAIL]
[xUnit.net 00:00:00.9321133] Assert.Equal() Failure
[xUnit.net 00:00:00.9321913] ↓ (pos 0)
[xUnit.net 00:00:00.9322648] Expected: 1 2 Fizz 4 Buzz
[xUnit.net 00:00:00.9323297] Actual:
[xUnit.net 00:00:00.9323876] ↑ (pos 0)
[xUnit.net 00:00:00.9324578] Stack Trace:
[xUnit.net 00:00:00.9325473] F:\4870\FizzBuzz\test\FizzBuzzTests\FizzBuzzTestsMaster.cs(30,0): at FizzBuzzTests.FizzBuzzTestsMaster.Given5Result12fizz4buzz()
[xUnit.net 00:00:00.9327846] FizzBuzzTests.FizzBuzzTestsMaster.Given15Result12fizz4buzzfizz78fizzbuzz11fizzfizz1314fizzbuzz [FAIL]
[xUnit.net 00:00:00.9328761] Assert.Equal() Failure
[xUnit.net 00:00:00.9329459] ↓ (pos 0)
[xUnit.net 00:00:00.9330050] Expected: 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fiz···
[xUnit.net 00:00:00.9331245] Actual:
[xUnit.net 00:00:00.9332037] ↑ (pos 0)
[xUnit.net 00:00:00.9332891] Stack Trace:
[xUnit.net 00:00:00.9333733] F:\4870\FizzBuzz\test\FizzBuzzTests\FizzBuzzTestsMaster.cs(38,0): at FizzBuzzTests.FizzBuzzTestsMaster.Given15Result12fizz4buzzfizz78fizzbuzz11fizzfizz1314fizzbuzz()
[xUnit.net 00:00:00.9356137] Finished: FizzBuzzTests
Failed FizzBuzzTests.FizzBuzzTestsMaster.Given4Result12fizz4
Error Message:
Assert.Equal() Failure
↓ (pos 0)
Expected: 1 2 Fizz 4
Actual:
↑ (pos 0)
Stack Trace:
at FizzBuzzTests.FizzBuzzTestsMaster.Given4Result12fizz4() in F:\4870\FizzBuzz\test\FizzBuzzTests\FizzBuzzTestsMaster.cs:line 22
Failed FizzBuzzTests.FizzBuzzTestsMaster.Given2Result12
Error Message:
Assert.Equal() Failure
↓ (pos 0)
Expected: 1 2
Actual:
↑ (pos 0)
Stack Trace:
at FizzBuzzTests.FizzBuzzTestsMaster.Given2Result12() in F:\4870\FizzBuzz\test\FizzBuzzTests\FizzBuzzTestsMaster.cs:line 14
Failed FizzBuzzTests.FizzBuzzTestsMaster.Given5Result12fizz4buzz
Error Message:
Assert.Equal() Failure
↓ (pos 0)
Expected: 1 2 Fizz 4 Buzz
Actual:
↑ (pos 0)
Stack Trace:
at FizzBuzzTests.FizzBuzzTestsMaster.Given5Result12fizz4buzz() in F:\4870\FizzBuzz\test\FizzBuzzTests\FizzBuzzTestsMaster.cs:line 30
Failed FizzBuzzTests.FizzBuzzTestsMaster.Given15Result12fizz4buzzfizz78fizzbuzz11fizzfizz1314fizzbuzz
Error Message:
Assert.Equal() Failure
↓ (pos 0)
Expected: 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fiz···
Actual:
↑ (pos 0)
Stack Trace:
at FizzBuzzTests.FizzBuzzTestsMaster.Given15Result12fizz4buzzfizz78fizzbuzz11fizzfizz1314fizzbuzz() in F:\4870\FizzBuzz\test\FizzBuzzTests\FizzBuzzTestsMaster.cs:line 38
Total tests: 4. Passed: 0. Failed: 4. Skipped: 0.
Test Run Failed.
Test execution time: 2.1205 Seconds
public string GetResult(int nmbr) {Build and run your tests again. This should be the outcome:
string result = "";
for (int ndx=1; ndx<nmbr+1; ndx++) {
if (ndx % 3 == 0 && ndx % 5 ==0) {
result += "FizzBuzz ";
} else if (ndx % 5 ==0 ) {
result += "Buzz ";
} else if (ndx % 3 ==0 ) {
result += "Fizz ";
}
else
result += ndx.ToString() + " ";
}
return result;
}
Build started, please wait...Rejoice that all our tests have successfully passed.
Build completed.
Test run for F:\4870\FizzBuzz\test\FizzBuzzTests\bin\Debug\netcoreapp1.1\FizzBuzzTests.dll(.NETCoreApp,Version=v1.1)
Microsoft (R) Test Execution Command Line Tool Version 15.0.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
[xUnit.net 00:00:00.5944016] Discovering: FizzBuzzTests
[xUnit.net 00:00:00.7260788] Discovered: FizzBuzzTests
[xUnit.net 00:00:00.7727980] Starting: FizzBuzzTests
[xUnit.net 00:00:00.9098086] Finished: FizzBuzzTests
Total tests: 4. Passed: 4. Failed: 0. Skipped: 0.
Test Run Successful.
Test execution time: 1.9927 Seconds
No comments:
Post a Comment