How to Setup Foundry and Write a Basic Unit Test
Learn how to set up Foundry and use the Forge command-line tool to run your smart contract tests written in Solidity.
Last updated
Was this helpful?
Learn how to set up Foundry and use the Forge command-line tool to run your smart contract tests written in Solidity.
Last updated
Was this helpful?
Before you begin, you should be familiar with the following:
To follow along, start with the main
branch, which is the default branch of this repository. This gives you the initial state from which you can follow along with the steps as described in the tutorial.
Next, add the Forge Standard Library to your project:
This command will add the forge standard library to our project by creating a folder named lib
. The forge standard library is the preferred testing library when working with Foundry.
Foundryup represents Foundry's tool management approach. Executing this command will install forge
and other essential Foundry CLI tools.
You should see output similar to the following:
You may need to add foundry to PATH and open a new terminal to make the foundryup
command available. Then run foundryup
to install Foundry.
In order to make the import of the forge standard library easier to write, we will remap the dependency.
Open the project setup-foundry-and-write-basic-unit-test
, in a code editor.
Create a new text file under the root directory named remappings.txt
Paste in the following line of code
When we want to import from forge-std
we will write: import "forge-std/Contract.sol"
A test file named TodoList.t.sol
has been provided to you under the test
folder.
On line 7, we see our TodoListTest
contract inherits Forge Standard Library's Test contract, which provides us access to the necessary functionality to test our smart contracts.
Create an instance of the contract TodoList.sol
in TodoList.t.sol
order to be able to test it.
Look for a comment in the code to locate the specific lines of code that you will need to edit. For example, in this step, look for this: // Step (1) in the accompanying tutorial. You will need to delete the inline comment that looks like this: /* ... */. Replace it with the correct code.
The setup()
function is invoked before each test case is run and is optional. Have the TodoList.t.sol
test contract deploy a new TodoList contract by adding the following code in the setUp()
function.
createTodo()
Assert that the numberOfTodosAfter
executing createTodo()
is equal to the numberOftodosBefore
+ 1.
Foundry expects the test
keyword as a prefix to distinguish a test. Therefore, all tests you want to run must be prefixed with the test
keyword.
Foundry expects the test
keyword as a prefix to distinguiash a test. Therefore, all tests that you want to run must be prefixed with the test
keyword.
In the terminal, ensure you are in the root project directory and build the project.
You should see output similar to the following:
After a successful build, run your test.
You should see output similar to the following:
By default forge test
only displays a minimal summary of a test, whether it failed or passed. You can display more detailed information by using the -v
flag and increasing the verbosity.
In the terminal, re-run your test but include a verbosity level 4. This will display stack traces for all tests, including the setup.
The foundry.toml
file is a configuration file that is used to configure forge.
Create a new file in the root directory named foundry.toml
. Paste the following contents.
TodoList.sol
Replace the comment #/* ... */
with the line below:
In the terminal, generate a gas report.
You should see output similar to the following:
Your output will show you an estimated gas average, median, and max for each contract function used in a test and total deployment cost and size.
Congratulations, you have completed how to setup Foundry and write a basic unit test.
You have learned how to:
Forge manages dependencies by using . Run the steps below to add and install the git submodules necessary to use Forge.
Forge has functionality built in to give you of your contracts. You can specify which contract should generate a gas report in the foundry.toml
file.
Writer: Abi Castro, DevRel Engineer
Editor: Brendan, DevRel Engineer
|
|