C#如何在抽象类中Moq保护类
我试图模拟受保护的类,但抛出异常System.ArgumentException:“Member Manager.handler不存在。”。如何模拟受保护的类?下面是我的代码C#如何在抽象类中Moq保护类,c#,unit-testing,moq,C#,Unit Testing,Moq,我试图模拟受保护的类,但抛出异常System.ArgumentException:“Member Manager.handler不存在。”。如何模拟受保护的类?下面是我的代码 [TestMethod] public void MyTest4() { Mock<Manager> mock = new Mock<Manager>(); var result = (FileHandler)Assembly.GetExec
[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;
}
[TestMethod]
公共无效MyTest4()
{
Mock Mock=新Mock();
var result=(FileHandler)Assembly.getExecutionGassembly().CreateInstance(“AB.Tests.FileHandler”,true);
mock.Protected().Setup(“handler”)。返回(结果);
}
公共抽象类管理器
{
受保护的FileHandler=null;
}
公共抽象类FileHandler
{
受保护字符串firstName=null;
受保护字符串lastName=null;
}
您可以尝试使用扩展并再次使用直接反射来调用所需的方法
一个片段是:
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());
var mockMyClass=new Mock();
mockMyClass.Protected().Setup(“handler”)。返回(结果);
//表演!
var result=(bool)mockMyClass.Object.GetType().InvokeMember(“管理器”,
BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance,
无效的
mockMyClass.Object,
无效);
//断言
断言(结果);
mockMyClass.Protected().Verify(“handler”,Times.Once());
对不起,我不明白你的意思。我的现有代码将在此行“mockMyClass.Protected().Setup(“handler”)。返回(结果);”时出错。你能解释更多细节吗?感谢这是一个基本的代码片段,您需要在这里创建一个受保护的扩展,然后使用直接反射来调用所需的测试。看看我所附的链接,一个你明白的链接,事情对你来说会更清楚。moq与虚拟属性和方法一起工作。可以重写的成员。它不能模拟受保护的字段,也不能像在示例中那样创建抽象类的实例。