As per the comments:
Test cases will by default run in isolation of existing org data. So it won't be able to see any existing leads. Ideally your test should insert any test data it needs first. See also @isTest(SeeAllData=true) Try to avoid using live data whenever you can.
If you do find adding
SeeAllData=true makes your test class pass, I'd strongly advise revisiting the test to script in any required data and switching back to @isTest(SeeAllData=false).
"Why?" you ask when your test case is now passing?
Your test might be working right now, but some point in the future the records that it depends on may change or be deleted. Records will differ as you deploy changes between sandboxes and production. Test case code that depends on existing data becomes very fragile and will break at the most inopportune moment.
There are plenty of examples on this site of people having deployment problems late Friday night and asking for urgent help because the tests that were working sometime last year are now mysteriously failing in production. Someone or something changed in the underlying data. Now they can't deploy the urgent change set that the sales department wants ASAP and the CTO is standing at their desk demanding answers.
Yes it can be a pain to setup all the required test data. However, it is a good habit to get into and will save you from much greater pain later on.