Integration testing involves running tests against a forked instance of mainnet or another network to be able to test a smart contract and its interactions with third-party contracts. They are analogous to integration and system tests in traditional software programming. Scenario tests are integration tests written in a higher-level language for writing test scenarios. Most smart contract development frameworks support fork testing natively with some differences that are noted in How to Improve Testing Productivity.
Best practices that we noted in Unit Testing are applicable to integration testing as well. The use of mocking however is more limited and instead it's common to impersonate certain accounts (e.g., users holding large amounts of tokens that should be tested also called "whales") and test how they would be able interact with the protocol.