is the error telling me that I don't have an Asset with the name "TestAsset"?
Precisely. The "List has no rows for assignment" means that you tried to assign the result of a query that returned no records to a variable.
If you get a "List has more than 1 row for assignment to SObject" error it would mean the opposite: you got more than one record in your query, and you are trying to assign it to a single instance in your code. In this case you need to either refine your query to get just one record or change your variable type to a list.
So, after reading your code, some things come to my mind:
- On the first line you have
seeAlldata=true in your class. This means that when the test is run, it will be able to read the data in your organization. No big deal, actually, but you might not need this, see below.
- Lines 3 to 81 are basically for setting up some test data (which would make the
TestBillingSchedule2 are methods that will be using the test data created previously. If they are failing then you need to fix whatever is causing the error (in this case, the Asset is missing from the test data).
- If the
AssetTriggerHandlerTest class is also failing, you might want to check it before, since it is testing a trigger. The trigger behaviour will likely affect other tests, like the first one you posted.
- See the introduction to test methods.