I would go for the tone generator, because I already have one anyway and use it for business, so it's paid for. But if I didn't have one and did have a multimeter (everyone should have a multimeter), then I would actually test as follows, knowing that there are 12/3 cables rather than random individual wires:
- Connect Black/White/Red together on the end of one cable. Mark this cable 1.
- Go to the other end. Test until you find the one where black/white/red show continuity. Mark this cable 1.
- While you are at that end, connect black/red/white of another cable together. Mark this cable 2. Mark the other cable, cable 3.
- Go to the first end. Test until you find the one where black/white/red show continuity. Mark this cable 2. Mark the last cable, cable 3.
If you have some resistors around of known values, you could do everything in one batch, but with only 3 cables, this is about as easy as it gets. Actually, thank you @cube for a way to do essentially that, by treating different combinations of wires in each cable differently, which allows you to differentiate 3 cables at one time without any resistors. This could actually be extended up to decoding as many as 5 cables at a time:
- Black/Red/White
- Black/Red
- Black/White
- Red/White
- None
Extending to more than 5 would actually become 4-at-a-time because you wouldn't know the difference between any of the "None" cables.