单元测试如何Mock测试对象的方法

张天星 2019-12-02 11:00:42
有三个类如下:

public interface IRepository1{}
public interface IService{
public void Function1(List<int> ids);
public void Function2(T xxInfo)
}
public class Service{
public IRepository1 Repository1 {get;set;}
public void Function1(List<int> ids)
{
var list = this.Repository1.GetList(ids) //这个是可以Mock的
foreach(var item in list){
this.Function2(item) //这个应该怎么模拟
}
}
}

单元测试的时候,我实例化一个Service,然后Mock一个IRepository1,来伪造GetList,返回模拟的数据
但是,后续循环调用了Service.Function2()
我怎么捕获Function2()的内容?替换里面的运行代码?
我用的是Moq

//arrange
Service service = new Service();
var mockRepository1 = new Mock<IRepository1>();
mockRepository1.Setup().Returns();
service.IRepository1 = mockRepository1.Object()
//act
service.Function1(new List<int>{1,2});
//assert
...全文
729 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
github_36000833 2019-12-02
  • 打赏
  • 举报
回复
Function2是Service的实现,你要测试Service类,应该Mock Function2依赖的功能
张天星 2019-12-02
  • 打赏
  • 举报
回复
引用 1 楼 github_36000833 的回复:
Function2是Service的实现,你要测试Service类,应该Mock Function2依赖的功能
嗯,主要是,不想MockFunction2里面的依赖,因为Function2,已经有一个对应的单元测试了。 我想测试Function1的内容,然后传递到Function2就结束,不需要重复测试Function2里面的内容。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧