C# > Testing and Debugging > Unit Testing > Assertions
Basic Assertion Example in Unit Testing
This snippet demonstrates a fundamental example of using assertions in a C# unit test using the `NUnit` framework. Assertions are crucial for verifying that the code behaves as expected.
Concepts Behind Assertions
Assertions are boolean expressions that evaluate to either `true` or `false` during a unit test. If an assertion evaluates to `false`, the test fails, indicating a bug or unexpected behavior in the code under test. Various assertion methods are provided by unit testing frameworks to check different conditions, such as equality, inequality, null values, and more.
Code Example: Simple Equality Assertion
This code defines a unit test that checks if the `Add` method correctly calculates the sum of two numbers. The `Assert.AreEqual()` method is used to assert that the `actualSum` is equal to the `expectedSum`. The third argument to `Assert.AreEqual()` is an optional message that is displayed if the assertion fails, providing more context about the failure. The `[Test]` attribute from `NUnit` marks the method as a test case.
using NUnit.Framework;
public class ExampleTests
{
[Test]
public void Add_TwoNumbers_ReturnsSum()
{
// Arrange
int a = 5;
int b = 10;
int expectedSum = 15;
// Act
int actualSum = a + b;
// Assert
Assert.AreEqual(expectedSum, actualSum, "Sum is incorrect");
}
}
Real-Life Use Case
Imagine you are testing a function that calculates the discount on a product. An assertion can verify that the calculated discount matches the expected discount value based on predefined rules. This helps ensure that the discount logic is implemented correctly.
Best Practices
When to Use Assertions
Assertions should be used in every unit test to verify the expected behavior of the code. They are the cornerstone of automated testing and provide a mechanism to detect bugs early in the development cycle.
Interview Tip
Be prepared to explain the purpose of assertions in unit testing and describe different types of assertions available in your preferred testing framework (e.g., `Assert.AreEqual`, `Assert.IsTrue`, `Assert.IsNull`). Also, demonstrate an understanding of how to write effective and maintainable unit tests that use assertions appropriately.
Alternatives
While `Assert.AreEqual` is a common assertion, NUnit and other frameworks provide a rich set of assertion methods. Alternatives include `Assert.IsTrue`, `Assert.IsFalse`, `Assert.IsNull`, `Assert.IsNotNull`, `Assert.Greater`, `Assert.Less`, `Assert.Throws`, and more. The choice depends on the specific condition being tested.
Pros
Cons
FAQ
-
What happens if an assertion fails?
If an assertion fails, the unit test is immediately terminated, and the testing framework reports the failure. The failure message typically includes information about the expected value and the actual value, helping to diagnose the problem. -
Can I use assertions outside of unit tests?
While assertions are primarily used in unit tests, you can technically use them in regular code as a form of defensive programming. However, this is less common in C# than in languages like Python where `assert` is a built-in keyword. In C#, conditional compilation (`#if DEBUG`) can be used to enable assertions in debug builds only.