Ravi Vijay
Posted on September 8, 2024
Wolf Fact: That's how a pack of wolves sound
Xunit.net is a free, open-source, community-focused unit testing tool for the .NET Framework.
Let’s go. Please visit this link for the code.
Create a .NET console app ( for simplicity) and add an xUnit test project to the solution. Now, we have two projects in the solution — one for application logic and another for unit testing.
We should always keep the application code and its tests in separate projects.
Application- This project has our application logic.
Application.Test- As the name indicates, this project has test cases for the application code.
I wrote a simple method to divide two numbers in Logics class.
The access modifier for the method must be public. The xUnit checks all methods in all public exported classes in the assembly.
Now we will test this method. We will write unit tests for this method in the UnitTests class.
Don’t forget to add the Application project reference to the Application.Test project.
Fact-
[Fact]: Marks a test method
Assert: The assert class contains various static methods. These methods are utilized to evaluate the testing conditions. Example:- Assert.Equal(expected value, actual value), Assert.True(boolean condition)and many more. You can check all assert statements here.
We pass parameter values for the method and then compare the actual and expected values. In the TestDivide() method, we pass parameters as 4 and 2 for the numerator and denominator respectively.
We can run tests using Test Explorer.
or
Our test case passed for the numerator 4 and denominator 2. It would fail for numerator 1 and denominator 3.
We need to improve this test’s coverage. We should specify the precision in the assert statement.
Precision: Verify up to digits after the decimal
There is a drawback to writing test cases like this. We have to create different test methods for various inputs.
Theory-
xUnit theory overcomes the above drawback.
[Theory]: Marks a test method as being a data theory. A theory is a test case with multiple intakes.
[InlineData]: To provide data for theory.
For an InlineData row, the test method executes one time. So the method TestDivideMultipleInputs will be executed three times. We can provide input parameters and desired output for the divide method using InlineData.
Exception-
This testing tool does not address exceptions with the general assert statements. It uses Assert.Throws. It validates that the exact exception is thrown and not a derived exception type.
For a zero denominator, the code will throw a DivideByZeroException. The TestDivideByZero() test method validates it. You may try different types of exceptions to verify.
Any feedback would be greatly appreciated. Thank you.
Posted on September 8, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.