我尝试模拟受保护的类,但抛出异常System.ArgumentException:'成员Manager.handler不存在。如何模拟受保护的类?下面是我的代码。
[TestMethod]
public void MyTest4()
{
Mock<Manager> mock = new Mock<Manager>();
var result = (FileHandler)Assembly.GetExecutingAssembly().CreateInstance("AB.Tests.FileHandler", true);
mock.Protected().Setup<FileHandler>("handler").Returns(result);
}
public abstract class Manager
{
protected FileHandler handler = null;
}
public abstract class FileHandler
{
protected string firstName = null;
protected string lastName = null;
}
答案 0 :(得分:1)
您可以尝试使用扩展名moq's protected并再次使用直接反射来调用所需的方法。
摘要为:
var mockMyClass = new Mock<MyClass>();
mockMyClass.Protected().Setup<Handler>("handler").Returns(result);
// Act!
var result = (bool)mockMyClass.Object.GetType().InvokeMember("Manager",
BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,
null,
mockMyClass.Object,
null);
// Assert
Assert.IsTrue(result);
mockMyClass.Protected().Verify<Handler>("handler", Times.Once());