Writing unit tests for registered features and commands are easy and you don’t have to mock the whole language server. If you skipped the advanced usage page, take a look at passing language server instance section for more details.
Json Extension example’s unit tests might be helpful, too.
Integration tests coverage includes the whole workflow, from sending the client request, to getting the result from the server. Since the Language Server Protocol defines bidirectional communication between the client and the server, we used pygls to simulate the client and send desired requests to the server. To get better understanding of how setup it, take a look at our test fixtures.