I disagree because for the "real mock" in the test I have to use Strict Mock(here're some confusion because of in Moq there're no such thing as a Stub. For the stub I have to use Loose Mock). When I'm calling VerifyAll I'm verifying that all "setups" which were set in "Arrange" part were actually done in the Act part when we performed certain call on a SUT(System under the test). I don't see anything bad here, except the thing you have said "it is not obvious what actually is checked", but the main problem I see
if I want to verify that something was really called I have to repeat in the "Assert" part all the "Setups" I did for that mock object in the "Arrange" part. I see problems with DRY principle.
I see that my "Arrange" part will have just setups for that mock, and "Assert" part will have Verify call(s) with the same lambda(s) and additional Times argument. May be I'm doing something wrong? If yes, please tell me how to avoid those repetitions?
Don't suggest me use Loose mock for the "mock"(I mean real mock, not a stub). In that scenario I'm not able to check that nothing was called what should not be called.