Вы были в правильном направлении, чтобы высмеивать зависимости, но вам не хватает реализации принципа инверсии зависимости.
С вашим кодом как есть, вы привязываете MyClass к MockedClass, и, кроме того, вы позволяете MyClass контролировать время жизни объекта MockedClass.
Что вам нужно сделать, это изменить конструктор MyClass принять объект IMockedClass. Обратите внимание, что вы должны передать интерфейс, а не тип класса.
public class MyClass
{
readonly IMockedClass mockedClass = null;
public MyClass(IMockedClass mockedClass)
{
this.mockedClass = mockedClass();
}
public string Function2()
{ /* return a string here */ }
}
, и ваш тестовый код будет:
public string Function2Test()
{
var returnMock = new List<string>() { "1", "2", "3" };
var mockMockedClass = new Mock<IMockedClass>();
mockMockedClass.Setup(x => x.Function1()).Returns(returnMock);
var myClass = new MyClass(mockMockedClass.Object);
var result = myClass.Function2();
...
}