Here's my code:
public class Bar { } public class Foo { public string Name { get; set; } public Bar TheBar { get; set; } } public class Dependency { public Foo DoSomething(Expression<Func<Foo, bool>> exp1) { return new Foo(); } } public class Base { public Dependency Dependency { get; set; } public virtual Foo MethodA(Expression<Func<Foo, bool>> exp1, params Expression<Func<Foo, object>>[] exp2) { return Dependency.DoSomething(exp1); } } public class Derived : Base { public Foo DerviedMethod(string str) { return base.MethodA(e1 => e1.Name.Equals(str), e2 => e2.TheBar); } }
And my Unit Test code:
var mock = new Mock<Derived> { CallBase = true }; // Same result with false mock .Setup(m => m.MethodA( It.IsAny<Expression<Func<Foo, bool>>>(), It.IsAny<Expression<Func<Foo, object>>>() )) .Returns(new Foo()); // Act var result = mock.Object.DerviedMethod("test"); // Assert Assert.IsNotNull(result);
But it still calls the original method and not the mocked one. Both classes exist in same assembly.
I have searched about it and almost all people got it right with CallBase = true
or false
.
Any ideas what is wrong with above code?