# Develop Comprehensive Unit Tests

Unit tests are indispensable in smart contract development, particularly for ensuring security. Unlike traditional software, smart contracts are deployed in a highly adversarial environment and, on top of this, might be immutable. Therefore, bugs can lead to irreversible financial losses.

Unit tests allow developers to validate individual components of the contract in isolation, ensuring that each function behaves as expected under both normal and edge-case scenarios. By catching logical errors early, developers can prevent vulnerabilities in a cost-effective manner.

Furthermore, the presence of thorough unit tests acts as a **safety net** during future code changes, minimizing the risk of introducing new vulnerabilities.

***

## Platforms for Unit Testing

1. [**Foundry**](https://github.com/foundry-rs/foundry)\
   A fast and flexible framework for Solidity, Foundry allows writing unit tests in Solidity itself. It's known for speed and ease of use, making it ideal for efficient and secure testing.
2. [**Hardhat**](https://hardhat.org/)\
   Hardhat is a popular Ethereum development environment that supports testing in JavaScript, TypeScript, and Solidity. It features a built-in Ethereum network for local testing and integrates with testing libraries like Mocha and Chai for comprehensive testing workflows.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.optimumsec.xyz/testing/unit-tests.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
