I sent a cover letter to American Campus Communities offering to work any of the areas where I had significant experience. The 'Job Title' is a role they have advertised on their job page. About two weeks after I sent the cover letter, they sent me a link to a mandatory skills test.
This test was certainly 'thorough'. Some of the questions came in two parts. One had to write a certain amount of code in the first part, and then either write more code or answer more detailed questions in the second part. I recall in particular questions about creating unit tests. Another question had to do with two classes, one of which had a constructor which populated it's properties with 'vaguely dissimilar' properties of an instance of the other, requiring non trivial spitting, combining, type conversion, coercion, etc. of various members.
I would not describe the test as either 'unfair' or 'excessive' for the role they were asking me to fill. However, this test had to be 'passed' before anyone would talk on the phone or in person. Due to the way this test was structured, it would have had to have been evaluated by a programmer or a project manager - these tests were not 'multiple choice' - the programmer had to create code, in some cases inserting one's 'enhancement' inside the code provided in the test question.
There are a number of distinct hazards with testing software developers:
1. The skills evaluated on the test may not be skills actually needed for the role. Managers might decide to 'over-test' in some vague presumption that such skills 'may be needed eventually'. Managers may not even know what skills they need the most. They may test a 'bunch' to make sure the base they need covered right now is included.
2. Knowledge of various arcane elements of a language isn't necessarily knowledge of how to solve problems. Many developers learn enough about the language they use to get data from the form into the database, and out of the database into a report. In earlier roles, their value was in collecting design inputs and bug incidents from users, and rapidly and reliably updating the system to reflect user needs. Most of this is either data structure or business logic, and has little to do with a larger grasp of the language(s).
3. 'Rich' languages in particular come in various flavors. The C# of VS2005 has material differences from the C# of VS2013. New functionality is added and old functionality is deprecated, so what is 'the right way' to code a user or database interface in .NET 2.0 isn't the 'best' way to do that in .NET 4.5. Certain language skills may be 'presumed' based on current practice, in a situation where a developer had only worked on a legacy version of the language. Languages that could be particularly susceptible to this are C#, Javascript, Java, and PHP, at the very least.
To be fair, I had asked for certain terms in the cover letter that were 'unusual'. It's quite possible that I 'passed' the test, but 'failed' to progress further due to what I was asking for.