Telerik JustMock免费下载30天试用版

调用原始

CallOriginalMethod标记了应该执行原始方法/属性实现的模拟方法/属性调用。

带Void调用的CallOriginal

你可以用CallOriginal关于方法和属性。这也包括不返回值的方法。考虑下面的类:

示例设置

public class Log {public virtual void Info(string message) {throw new Exception(message);}}
Public Class Log Public overrides Function Info(ByVal message As String) As String抛出New Exception(message) End Function结束类

让我们来安排一下信息方法与其原始实现一起调用,并验证调用。

示例1:调用原始实现

[TestMethod] [ExpectedException(typeof(Exception))] public void MockAssertOnCallOriginal(){//安排var log = Mock.Create< log >();Mock.Arrange(() => log.Info(Arg.IsAny())).CallOriginal();// Act log.Info("test");}
  Public Sub MockAssertOnCallOriginal() '安排Dim log = Mock。Create(Of Log)() Mock.Arrange(Function() Log . info (Arg.AnyString)).CallOriginal() '动作日志信息(“测试”)结束子

上帝的呼唤信息方法抛出异常。要验证此行为,我们使用ExpectedException属性提供自Microsoft.VisualStudio.TestTools.UnitTesting命名空间(在Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll).

CallOriginal取决于参数值

本节展示如何设置对方法的调用应该为一个参数调用原始实现,并为另一个参数调用fake。

对于这个例子,我们将使用下面的样例类:

示例设置

公共类FooBase{公共字符串GetString(字符串str){返回str;}}
公共类FooBase公共函数GetString(ByVal str As String) As String返回str End Function结束类

示例2显示如何根据调用方法时使用的参数值实现模拟对象的不同行为。

例2:调用原始实现vs .根据参数值自定义方法行为

[TestMethod] public void ShouldCallOriginalForSpecificArgs(){//安排//创建一个模拟的FooBase。var foo = Mock.Create();//设置当使用参数"x"调用方法时,应该调用原始方法实现。Mock.Arrange(() => foo.GetString("x")).CallOriginal();//设置一旦使用参数“y”调用方法,它应该返回“z”。Mock.Arrange (() = > foo.GetString (" y ")) .Returns(“z”);// Act var actualX = string.Empty;var actual = string.Empty;actualX = foo.GetString("x");actual = foo.GetString("y"); var expectedX = "x"; var expectedY = "z"; // Assert Assert.AreEqual(expectedX, actualX); Assert.AreEqual(expectedY, actualY); }
 Public Sub ShouldCallOriginalForSpecificArgs() '安排创建一个模拟的FooBase。Dim foo = Mock。创建(Of FooBase)()设置当使用参数“x”调用方法时应该调用原始方法实现。Mock.Arrange(Function() foo.GetString("x")).CallOriginal() '设置一旦使用参数“y”调用方法,它应该返回“z”。Mock.Arrange(Function() foo.GetString("y")).Returns("z") 'Act Dim actualX = String。空Dim实际上=字符串。Empty actualX = foo.GetString("x") actualY = foo.GetString("y") Dim expectedX = "x" Dim expectedY = "z" ' Assert Assert.AreEqual(expectedX, actualX) Assert.AreEqual(expectedY, actualY) End Sub

另请参阅

在本文中
Baidu
map