Question: In MSTest, the `[Shadowing]` attribute helps you to unit test a private method from another assembly. Here is the related link : [What is the Shadowing attribute that the VS uses when it generates unit tests?](https://stackoverflow.com/questions/3443755/what-is-the-shadowing-attribute-that-the-vs-uses-when-it-generates-unit-tests)

My questions are:

1. Should private methods be unit tested separately?
2. Is it a good (?) practice to change private method's accessor to `internal` just to make it available for unit testing in some other test project/assembly? (using `InternalsVisibleTo`)
3. If private methods get tested indirectly through the public method that calls them, can it be called "unit" testing?

Answer: 
To answer your questions briefly:

1. In general, they shouldn't. Most of the times, your private bits will be tested while testing class contract/public API. For the times this is not possible, testing private method is unit test just as anything else.
2. This is fairly common. While changing visibility might be considered bad idea, it's not as bad when it changes only to internal. However, in approaches like TDD, the need of testing usually drives your desing in such way that "hacks" like this are not needed. But like I said, it's fairly common - you shouldn't worry too much about it, unless it gets to ridiculous levels (say, entire private parts of classes exposed).
3. It is unit test as long as it tests *single unit* (or, [one logical *concept*](https://stackoverflow.com/q/9738314/343266)) of your class. Private methods more often than not are created as a results of refactorings in public parts, which most of the times will be targeted by the *single unit* testing. If you feel your private method is not longer an *unit*, it might be a refactoring call.

Also, I suggest having a look [here](https://stackoverflow.com/questions/250692/how-do-you-unit-test-private-methods/250719#250719), [here](https://stackoverflow.com/questions/9202862/is-unit-testing-private-methods-a-good-practice/9203039#9203039) and [here](https://stackoverflow.com/questions/9615597/while-unit-testing-i-frequently-require-to-test-internal-private-logic-what-i/9615860#9615860).
I would preffer to exercise all the private methods thru the public available calls. There must be a path to execute each private line from a public call and if it is not there you can delete that code.

Using internal instead of private could end with a big mess, I won't use that approach.