Первая проблема состояла в том, что вы не можете использовать .Object
Mock в качестве источника типа, так как это не "правильный" тип. Самый безопасный способ - использовать сам интерфейс в качестве источника типа.
Вторая проблема заключалась в том, что вам нужно указать параметр для лямбда-выражения, и это должно быть то, для чего вы вызываете метод; так же, как вы делаете в тесте 1 m => m.DoSomething
.
В качестве бонуса я бы рекомендовал использовать nameof()
вместо жестко закодированных имен строк - это означает, что вы получите ошибки времени компиляции, если сделаете опечатку, а не ошибки времени выполнения.
И я добавляю шаблон 'Arrange Act Assert', чтобы улучшить читаемость; что особенно важно, поскольку этот способ намного сложнее для чтения, чем простое лямбда-выражение, встроенное в параметр метода Verify.
Так что исправленная версия выглядит так ...
[TestMethod]
public void TestMethod2()
{
// Arrange.
Mock<ISomeInterface> myMock = new Mock<ISomeInterface>();
ImplementationClass myImplementationClass = new ImplementationClass(myMock.Object);
string Arg1 = "Arg1";
string Arg2 = "Arg2";
// Act.
myImplementationClass.Investigate(Arg1, Arg2);
// Assert.
var methodInfo = typeof(ISomeInterface).GetMethod(nameof(ISomeInterface.DoSomething));
var parameter = Expression.Parameter(typeof(ISomeInterface), "m");
var call = Expression.Call(parameter, methodInfo, Expression.Constant(Arg1), Expression.Constant(Arg2));
Expression<Action<ISomeInterface>> expression = Expression.Lambda<Action<ISomeInterface>>(call, parameter);
myMock.Verify(expression);
}