当前位置:  开发笔记 > 编程语言 > 正文

如何用Moq模拟简单的实体类(POCO)?

如何解决《如何用Moq模拟简单的实体类(POCO)?》经验,为你挑选了1个好方法。



1> NikolaiDante..:

你不需要模仿它就可以用它来测试.

您应该能够SomeEntity直接在其当前状态下进行测试(并自行测试,但测试自动属性似乎是浪费精力).

如果你创建了一个实现的接口ISomeEntity,SomeEntity那么你就可以在任何消耗它的东西里面进行模拟.然后,您将能够测试ISomeEntity传入的方法的行为.

正如您所说,Moq要求它是一个界面或虚拟方法.

public class SomeEntity : ISomeEntity {
  public int Id { get; set; }
  public string Name { get; set; }
}

public interface ISomeEntity {
  int Id { get; set; }
  string Name { get; set; }
}

然后

var someMock = new Mock();

someMock.SetupGet(x => x.Id).Returns(12345678);
someMock.SetupGet(x => x.Name).Returns(It.IsIn(someList));

var result = somethingelse.Act(someMock.Obect);

如果你的对象像示例中那样没有逻辑,那么就没有必要去模拟

var item = new SomeEntity();

item .Id = 12345678;
item .Name = "some name";

var result = somethingelse.Act(item);

你试图通过这里使用模拟获得什么好处?如果你试图遍历列表并验证其中的每个项目,It.IsIn将不会这样做(甚至附加到模拟)它将检查所有它将分配给模拟的值是否在允许的列表中值.

这打破了每个测试格言的单个断言,但我认为这是你想要的:

var item = new SomeEntity();

foreach (var name in someList)
{
  item .Id = 12345678;
  item .Name = name ;

  var result = somethingelse.Act(item);
  // Assert
}

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有