Note: OP has significantly edited and changed the question, so this answer is a bit obsolete, but leaving for now for history. Original answer follows:
Assuming that _generate_something() and _do_something() work, and are properly unit tested individually, a good argument can be made not to bother testing func() at all. IMO, it's well past the point of diminishing returns in unit-testing. YMMV. (Note: If there were many lines of code between the two lines in your example then a test makes sense)
For example, your Options B-D, as I understand them, are just a complicated way to test the results of _generate_something(), which you could just test directly. Now, maybe they make sense in the overall design of your program, but adding that amount of complexity just for unit tests is a mistake.