Isn't this a bit idealistic?
No, absolutely not.
You can never cover everything in tests
You can, and by applying TDD, you choose a workflow that even forces that. There are features that can't be covered by automated unit tests though, for example graphical things. Those have to be tested by humans but are also usually not critical.
and waiting for all possible tests to be written before a feature is implemented is only feasible in simple cases
I think you got the idea of TDD wrong. You don't write
all tests beforehand. You write one single test case, and then you write the implementation, like this:
// Test case:
test( sum( 1, 2 ) == 3 );
// Implementation:
int sum( int a, int b ) {
return a + b;
}
One rule is that you only write code in the implementation that's being covered by the test cases. If it's not covered, you have to write another test first.
but bugs often appear in unexpected places (such as when you combine multiple features, and only in rare special cases)
And that's what unit testing avoids: Having unexpected bugs. If code is covered, there's no way you can miss a bug. You can still write wrong test cases, but here the following applies: Do you want to not do testing and accept a high chance of bugs, or do you want to do testing and accept a very low chance of writing wrong tests? If something's goes wrong, you've got a problem in both cases, but with unit testing it's minimized.
When you combine multiple features you do so called "integration tests", either with real objects or mock objects. It's all testable.
the chances of unintentional bugs just get reduced quite a bit and since you have all these tests, figuring out what is not being tested is quite a bit easier.
What do you mean by "unintentional bugs"? Let's assume theoretical 100% code coverage, how should a bug happen? The only chance something goes wrong is when you write a wrong test case -- but that's not a bug, it's a logic error.
Personally, I think it sounds awesome, but it often seems like so much work, plus there's always that thing, that you can't really test, especially for games...
Writing unit tests means work, yes. Robert C. Martin says "Professional programmers want to make sure that their code works", and I fully agree to that. The result is software tests. And by the way, software tests are also fun once you get used to the workflow.
The situation for games is not really different than for other application types. You can test nearly everything, except graphics effects and such. Untestable things are the rare cases.