C# 用setter注入模拟接口的MOQ
请输入下面的代码片段C# 用setter注入模拟接口的MOQ,c#,testing,nunit,moq,C#,Testing,Nunit,Moq,请输入下面的代码片段 public class FileUploadPresenter { private IFileRepository FileRepository { get { return UnityManager.Resolve<IFileRepository>(); } } public void LoadData(int id) { //How can I redirect the below
public class FileUploadPresenter
{
private IFileRepository FileRepository
{
get { return UnityManager.Resolve<IFileRepository>(); }
}
public void LoadData(int id)
{
//How can I redirect the below ReadData call to Mocked method in the testcase ?bypassing the FileRepository getter ?
List<FileModel> fileModelList = FileRepository.ReadData(Id);
//Do something with the data
}
}
公共类文件上载演示器
{
专用IFileRepository文件存储库
{
获取{return UnityManager.Resolve();}
}
公共void加载数据(int-id)
{
//如何将下面的ReadData调用重定向到testcase中的mock方法?绕过FileRepository getter?
List fileModelList=FileRepository.ReadData(Id);
//对数据做点什么
}
}
我的单元测试用例
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<IFileRepository>();
FileModelfm = new FileModel();
fm.FileId = 1;
fm.FileName = "abc";
fm.PolicyTxnId = 10;
List<FileModel> fml = new List<FileModel>();
fml.Add(fm);
mock.Setup(item => item.ReadData(10)).Returns(fml);
FileUploadPresenter FileUploadPresenterobj = new FileUploadPresenter();
obj.LoadData();
}
[TestMethod]
公共void TestMethod1()
{
var mock=new mock();
FileModelfm=新的FileModel();
fm.FileId=1;
fm.FileName=“abc”;
fm.PolicyTxnId=10;
List fml=新列表();
fml.Add(fm);
mock.Setup(item=>item.ReadData(10)).Returns(fml);
FileUploadPresenter FileUploadPresenterRobj=新的FileUploadPresenter();
obj.LoadData();
}
在这里,我的模拟代码并没有真正起作用。我如何设置模拟,使调用类的接口方法调用击中被模拟的方法?这里我的接口属性是私有的,并且是只读的。我认为您需要向
UnityManager
注册模拟实例。模拟实例存储在模拟的对象
属性中
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<IFileRepository>();
UnityManager.RegisterInstance<IFileRepository>(mock.Object);
// ..
}
[TestMethod]
公共void TestMethod1()
{
var mock=new mock();
UnityManager.RegisterInstance(mock.Object);
// ..
}
您不应该以这种方式使用UnityManager。您的IFileRepository是一个依赖项,它应该注入到您的FileUploadPresenter中
您在这里实现的是服务定位器模式,因此很难进行测试
如果将FileUploadPresenter更改为具有接受IFileRepository的构造函数。然后,您可以为测试模拟IFileRepository