> For the complete documentation index, see [llms.txt](https://docs.optimumsec.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.optimumsec.xyz/testing/unit-tests.md).

# 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
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
