Telerik JustMock免费下载30天试用版

模拟非抽象和非虚拟类或成员

中支持的高级特性Telerik®JustMock使您能够模拟任何类或成员,包括非虚拟和非抽象实现。嘲弄非抽象类免费版中也有,但它只支持用虚方法模拟具体类。商业版还包括对非抽象和非虚拟成员的嘲弄的类。

商业版允许您模拟具体对象,而无需更改其接口中的任何内容。

这是一个提升的特性。指主题,以了解更多关于商业和Telerik JustMock的免费版本之间的差异。

下面是我们将要使用的示例类:

示例设置

public class Customer {public Customer(){抛出新的NotImplementedException("Constructor");}公共字符串名称{获取;设置;}公共int GetNumberOfOrders(){抛出新的NotImplementedException();}公共int GetNumberOfOrders(bool include complecompleted){抛出新的NotImplementedException();}公共无效AddOrder(string productName){抛出新的NotImplementedException();}公共委托无效OrderAddedEventHandler(bool添加);公共事件OrderAddedEventHandler OnOrderAddedCallback;}
公共类客户公共子新()抛出新NotImplementedException(构造函数)结束子公共财产名称字符串公共职能GetNumberOfOrders()作为整数把新的NotImplementedException结束()函数公共函数GetNumberOfOrders(按值传递includeCompleted布尔)作为整数把新的NotImplementedException公共子AddOrder()函数结束(按值传递productName字符串)把新NotImplementedException()结束子公共委托子OrderAddedEventHandler(按值传递补充道公共事件OnOrderAddedCallback作为OrderAddedEventHandler结束类

重要的

要使用这种对象模拟,首先需要从菜单中启用Telerik JustMock,从而进入提升模式。学习如何做,在如何启用/禁用Telerik JustMock的话题。

安排财产

即使未将属性标记为抽象或虚拟,也可以安排属性get和set。

示例1:属性getter的模拟具体实现

[TestMethod] public void ShouldSetupACallToAFinalProperty(){//安排var customerMock = Mock.Create();Mock.Arrange(() => customerMock.Name).Returns("TestName");// Act var actual = string.Empty;actual = customerMock.Name;//断言。AreEqual(“TestName”,实际);}
公共子ShouldSetupACallToAFinalProperty() '安排Dim customerMock = Mock。Create(Of Customer)() Mock.Arrange(Function() customerMock.Name).Returns("TestName") 'Act Dim actual =字符串。空actual = customerMock。名称“Assert”。AreEqual("TestName", actual)结束子节点

示例2定义了最后的设置customerMock。名字属性设置为任何字符串值,而不是“TestName”会导致类型异常吗StrictMockException被扔出去。

如果您想了解更多关于mock属性的信息,请查看模拟属性帮助主题。

示例2:模拟属性设置器的具体实现

[TestMethod] [ExpectedException(typeof(StrictMockException))] public void ShouldAssertPropertySet(){//安排var customerMock = Mock.Create(Behavior.Strict);Mock.ArrangeSet(() => customerMock。Name = "TestName");//执行customerMock。Name =“样本”;}
  Public Sub ShouldAssertPropertySet() '安排Dim customerMock = Mock。Create(Of Customer)(Behavior.Strict) Mock.ArrangeSet(Function() customerMock。Name = "TestName") 'customerMock行动。名字= "Sample" End Sub

安排方法

的实例进行模拟客户类的方法与将成员声明为的非抽象类的方法相同虚拟

示例3:模拟类及其成员的具体实现

[TestMethod] [ExpectedException(typeof(NotImplementedException))] public void ShouldCallOriginalForNonVirtualExactlyOnce(){//安排//创建对象的模拟var customerMock = mock .Create();//安排你的期望Mock.Arrange(() => customerMock.GetNumberOfOrders()).CallOriginal().OccursOnce();/ /行动customerMock.GetNumberOfOrders ();/ /维护Mock.Assert (customerMock);}
  Public Sub ShouldCallOriginalForNonVirtualExactlyOnce() '创建对象Dim customerMock = mock的模拟。Create(Of Customer)()安排你的期望Mock.Arrange(Function() customerMock.GetNumberOfOrders()).CallOriginal().OccursOnce() '调用customerMock.GetNumberOfOrders()Assert Mock.Assert(customerMock)结束子

泛型方法和类也可以被模拟。检查泛型主题了解有关该功能的更多详细信息。

安排方法重载

下面的示例展示了如何模拟方法具体实现的不同重载。客户。GetNumberOfOrders有两个重载-一个不带参数,一个带布尔参数。这里我们用return来嘲笑它们。在第一种情况下,我们只返回已经传递的参数。在第二种情况下,我们返回两个整数值的和。之后,调用两个重载并断言所安排的内容。

示例4:模拟重载方法的具体实现

[TestMethod] public void shouldassertonmethodooverload(){//安排var customerMock = Mock.Create();Mock.Arrange(() => customerMock.GetNumberOfOrders()).Returns(30);Mock.Arrange(() => customerMock.GetNumberOfOrders(Arg.Is(true))).Returns(10);// Assert. areequal (customerMock.GetNumberOfOrders(), 30);Assert.AreEqual (customerMock.GetNumberOfOrders(真实),10);}
公共子shouldassertonmethodooverload () '安排Dim customerMock = Mock。Create(Of Customer)() Mock.Arrange(Function() customerMock.GetNumberOfOrders()). returns (30) Mock.Arrange(Function() customerMock.GetNumberOfOrders()) .Returns (10)Assert. areequal (customerMock.GetNumberOfOrders(True), 10)结束子句

安排方法回调

在本节中,您将了解如何使用提出了方法在调用最终方法时触发回调并传递事件参数。

示例5:在调用非虚拟方法时触发回调并传递事件参数

[TestMethod] public void ShouldAssertOnMethodCallbacks(){//安排var customerMock = Mock.Create();Mock.Arrange(() => customerMock. addorder (Arg.IsAny())). raise (() => customerMock。OnOrderAddedCallback += null, true);Bool called = false;customerMock。OnOrderAddedCallback += delegate (bool added) {called = added;};//执行customerMock.AddOrder("test");// Assert. itrue(调用);}
 Public Sub ShouldAssertOnMethodCallbacks()安排Dim customerMock = Mock。Create(Of Customer)() Mock.Arrange(Function() customerMock.AddOrder(Arg.)IsAny(Of String)()) .引发(Sub() AddHandler customerMock。OnOrderAddedCallback, none, True) Dim called As Boolean = FalseOnOrderAddedCallback, Sub(添加为Boolean) called =添加' Act customerMock.AddOrder("test") 'Assert. istrue(被调用)结束子

有关引发模拟事件的更多信息,请参见基本用法| Raise的话题。

另请参阅

在本文中
Baidu
map