As mentioned by the others you need to declare the interface as Public.
The difference between a mock and a stub is quite subtle (from my understanding of Roy Osherove's Art of Unit Testing book).
- A stub is something that assists with the test but can never fail the test as the actual test is asserted against the Class Under Test.
- A mock can fail a test as the assertion is performed against that object.
To maybe further explain, a stub is a canned response (a fake object) which assists with performing the assertion later (i.e. it can be a parameter to a method you are testing). You would never assert that a stub passes or fails a test as it's an object you have configured to assist in testing something else
A mock on the otherhand has expectations set, for example, if I configure this object with set of parameters what do I expect to happen? Will it change it's internal state (as I expect) or does it throw an exception (that I expect). This is the assertion you are looking to test.
In more complicated tests you could have many stubs but you should aim to only have one mock.