请注明以下代码段
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
}
}
我的单元测试用例
[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();
}
这里我的模拟代码并没有真正起作用。如何设置一个模拟这样一种方式,从我的调用类调用接口方法将命中模拟方法?这里我的接口属性是私有和只读。
答案 0 :(得分:0)
我认为您需要使用UnityManager
注册您的模拟实例。模拟的实例存储在模拟的Object
属性中。
[TestMethod]
public void TestMethod1()
{
var mock = new Mock<IFileRepository>();
UnityManager.RegisterInstance<IFileRepository>(mock.Object);
// ..
}
答案 1 :(得分:0)
你不应该以这种方式使用UnityManager。您的IFileRepository是一个依赖项,它应该注入到您的FileUploadPresenter中。
您在此处实施的是服务定位器模式,因此难以测试。
如果您将FileUploadPresenter更改为具有接收IFileRepository的构造函数。然后,您可以为测试模拟一个IFileRepository。