[TestMethod]公共无效ShouldMockGenericClass(){intexpectedValue=1;/ /安排//创建"FooGeneric"类的模拟实例。 var喷火=模拟.创建<FooGeneric<int>>();//当使用任何整数作为参数调用虚foo.Get()时,它应该返回expectedValue。模拟.安排(()= >喷火.得到(参数.IsAny<int>())).返回(expectedValue);/ /行为intactualValue=喷火.得到(0);/ /维护断言.AreEqual(expectedValue,actualValue);}
<TestMethod>_公共子ShouldMockGenericClass()昏暗的expectedValue作为整数=1的安排’创建一个FooGeneric类的模拟实例。 昏暗的喷火=模拟.创建(的FooGeneric(的整数))()'当使用任何整数作为参数调用虚foo.Get()时,它应该返回expectedValue。模拟.安排(函数()喷火.[得到](参数.IsAny(的整数)())).返回(expectedValue)的行为昏暗的actualValue作为整数=喷火.[得到](0)的断言断言.AreEqual(expectedValue,actualValue)结束子
[TestMethod]公共无效ShouldAssertWithCustomSelect(){varsimpleDataInstance=新SimpleData();//安排-当simpleDataInstance. //产品_GET is called, it should return expected collection.模拟.安排(()= >simpleDataInstance.产品).ReturnsCollection(ReturnExpextedCollectionOfProducts());// Act -为simpleDataMock.Products应用LINQ查询。var实际=(从p在simpleDataInstance.产品在哪里p.unitsinstocks= =50选择p.ProductID).SingleOrDefault();/ /维护断言.AreEqual(2,实际);}
<TestMethod>_公共子ShouldAssertWithCustomSelect()昏暗的simpleDataInstance=新SimpleData()'安排-当simpleDataInstance. '产品_GET is called, it should return expected collection.模拟.安排(函数()simpleDataInstance.产品).ReturnsCollection(ReturnExpextedCollectionOfProducts())Act -为simpleDataMock.Products应用LINQ查询。昏暗的实际=(从p在simpleDataInstance.产品_p.unitsinstocks=50_选择p.ProductID).SingleOrDefault()的断言断言.AreEqual(2,实际)结束子
[TestMethod]公共无效DoPublic_OnExecute_ShouldCallDoPrivate(){var被称为=假;喷火喷火=新喷火();//安排-当从foo实例调用非公共方法DoPrivate()时,//它应该设置isCalled为true,而不是执行它原来的逻辑。模拟.非公开.安排(喷火,“DoPrivate”).DoInstead(()= >被称为=真正的);/ /行为喷火.DoPublic();// dopubpublic()应该调用dopprivate()。/ /维护断言.IsTrue(被称为);}
<TestMethod>公共子DoPublic_OnExecute_ShouldCallDoPrivate()昏暗的被称为=假昏暗的喷火作为新喷火()' Arrange -当从foo实例调用非公共方法DoPrivate()时,它应该将isCalled设置为true,而不是执行它原来的逻辑。模拟.非公开.安排(喷火,“DoPrivate”).DoInstead(函数()InlineAssignHelper(被称为,真正的))Act - dopubpublic()应该调用dopprivate()。喷火.DoPublic()的断言断言.IsTrue(被称为)结束子
[TestMethod]公共无效ShouldFakeStaticPropertyGet(){保龄球被称为=假;var预期=1;/ /安排//让静态实例(Foo)准备好进行模拟,忽略构造函数并应用严格的行为。//如果不模拟构造函数,则抛出NotImplementedException异常。模拟.SetupStatic(typeof(喷火),行为.严格的,StaticConstructor.嘲笑);//当static(Foo.FooProp_GET)属性被调用时,//它应该将true赋值给isCalled并返回预期值。模拟.安排(()= >喷火.必选).DoInstead(()= >{被称为=真正的;}).返回(预期);/ /行为var实际=喷火.必选;/ /维护断言.AreEqual(预期,实际);断言.IsTrue(被称为);}
<TestMethod>公共子ShouldFakeStaticPropertyGet()昏暗的被称为作为布尔=假昏暗的预期=1的安排让静态实例(Foo)准备好进行模拟,忽略构造函数并应用严格的行为。'如果我们不模拟构造函数,NotImplementedException将被抛出。模拟.SetupStatic(方法(喷火),行为.(严格的),StaticConstructor.嘲笑)'当static(Foo.FooProp_GET)属性被调用时,它应该将true赋值给isCalled并返回预期值。模拟.安排(函数()喷火.必选).DoInstead(子()被称为=真正的).返回(预期)的行为昏暗的实际=喷火.必选的断言断言.AreEqual(预期,实际)断言.IsTrue(被称为)结束子
[TestMethod]公共无效ShouldApplyIgnoreInstanceToVirtual(){var预期=10;/ /安排//创建"Calculus"类的模拟实例。//此mock还将用作给定类型的假值,用于将未来实例期望应用到该类型。var微积分=模拟.创建<微积分>();//当调用calculus.Sum()时,它应该返回预期值。//此外,此期望将适用于所有新创建的微积分类实例//在测试期间。模拟.安排(()= >微积分.总和()).IgnoreInstance().返回(预期);/ /行为varvalueFromExistingInstance=微积分.总和();varvalueFromNewInstance=新微积分().总和();/ /维护断言.AreEqual(预期,valueFromExistingInstance);//从已经存在的实例验证值。断言.AreEqual(预期,valueFromNewInstance);//验证新创建实例的值。}
<TestMethod>公共子ShouldApplyIgnoreInstanceToVirtual()昏暗的预期=10的安排’创建一个“Calculus”类的模拟实例。这个mock还将被用作给定类型的假变量,用于将未来实例期望应用到该类型。昏暗的微积分=模拟.创建(的微积分)()’当调用calculus.Sum()时,它应该返回预期值。同样,这个期望也适用于所有新创建的微积分类实例’。模拟.安排(函数()微积分.总和()).IgnoreInstance().返回(预期)的行为昏暗的valueFromExistingInstance=微积分.总和()昏暗的valueFromNewInstance=新微积分().总和()的断言断言.AreEqual(预期,valueFromExistingInstance)'从已经存在的实例验证值。断言.AreEqual(预期,valueFromNewInstance)'从新创建的实例验证值。结束子
[TestMethod]公共无效ShouldAssertCustomValueForDateTimeNow(){var预期=新DateTime(1900,4,12);//安排-这里我们安排,当DateTime。现在is called it should return expected DateTime.模拟.安排(()= >DateTime.现在).返回(预期);/ /行为var现在=DateTime.现在;//断言-日期确实是安排好的。断言.AreEqual(预期.一年,现在.一年);断言.AreEqual(预期.月,现在.月);断言.AreEqual(预期.一天,现在.一天);}
<TestMethod>公共子ShouldAssertCustomValueForDateTimeNow()昏暗的预期=新DateTime(1900,4,12)'安排-我们在这里安排,当DateTime。现在is called it should return expected DateTime.模拟.安排(函数()DateTime.现在).返回(预期)的行为昏暗的现在=DateTime.现在“坚持——日期确实是安排好的。断言.AreEqual(预期.一年,现在.一年)断言.AreEqual(预期.月,现在.月)断言.AreEqual(预期.一天,现在.一天)结束子
[TestMethod]公共无效ShouldReturnFakeDbSet_WhenDbContextPropertyIsCalled(){/ /安排NerdDinnersnerdDinners=新NerdDinners();//当DBSet属性nerdmeals。晚餐is called, it should return a predefined fake collection containing 3 items.模拟.安排(()= >nerdDinners.晚餐).ReturnsCollection(FakeDinners());//表演——我们称之为书呆子晚餐。晚餐and search for a dinner with a certain DinnerID.varactualQuery=从d在nerdDinners.晚餐在哪里d.DinnerID= =1选择d;//断言——我们断言nerdmeals .晚餐collection will actually return a collection with 3 items.断言.AreEqual(3.,nerdDinners.晚餐.数());//我们断言集合中只有一项DinnerID等于1。断言.AreEqual(1,actualQuery.数());断言.AreEqual(1,actualQuery.第一个().DinnerID);}
<TestMethod>公共子ShouldReturnFakeDbSet_WhenDbContextPropertyIsCalled()的安排昏暗的nerdDinners作为新NerdDinners()'当DBSet属性nerdmeals。晚餐is called, it should return a predefined fake collection containing 3 items.模拟.安排(函数()nerdDinners.晚餐).ReturnsCollection(FakeDinners())“表演——我们称之为书呆子晚餐。晚餐and search for a dinner with a certain DinnerID.昏暗的actualQuery=从d在nerdDinners.晚餐在维.DinnerID=1 d断言——我们断言书呆子晚餐。晚餐collection will actually return a collection with 3 items.断言.AreEqual(3.,nerdDinners.晚餐.数())“我们断言在我们的收藏中只有一件物品的DinnerID等于1。断言.AreEqual(1,actualQuery.数())断言.AreEqual(1,actualQuery.第一个().DinnerID)结束子
为独立单元测试在c#和VB中创建基本继承特性的模拟。
阅读更多安排LINQ查询以返回用于稳定单元测试的预定义数据。
阅读更多可以模拟私有、内部和受保护的方法、属性和类。
阅读更多创建静态方法和属性的模拟。
阅读更多控制将来创建的类实例的行为。
阅读更多CMock所有内容,包括System.DateTime.Now
阅读更多将单元测试与缓慢的数据库操作隔离开来。
阅读更多JustMock允许您轻松地隔离测试场景,并让您专注于想要验证的逻辑。它与您最喜欢的单元测试框架无缝集成,使单元测试和模拟简单而快速。
模拟所有的东西,比如非虚方法、密封类、静态方法和类,以及所有的非公共成员和类型,甚至包括MsCorLib的成员。
这是一款用于单元测试. net代码的完美工具,无论您处理的是复杂且难以维护的遗留代码,还是根据最佳实践编写的代码。
从查找调用模拟对象的参数到为什么不调用它或为什么重复调用它,JustMock调试窗口帮助您在调试单元测试时找到所要查找的答案。
JustMock允许您接收关于单元测试的完整性和彻彻净净性的关键反馈——这对于任何追求高质量代码的组织都是绝对必须的。它使用Visual Studio、dotCover、OpenCover等的代码覆盖集成将测试和覆盖结果关联起来。
你的成功是我们的首要任务。我们屡获殊荣的支持团队致力于帮助您解决您在应用程序开发过程中可能遇到的任何问题。
伟大——说你拥有它是一回事,但当别人认可它时,它的意义就更大了。Telerik很荣幸能获得以下行业奖项。
Telerik JustMock Azure DevOps任务已更新,现在包括Microsoft VSTest任务中的最新更改。
Telerik JustMock现在用ReturnAsync简化了异步方法的模拟。
Telerik JustMock支持。net 7最新预览版。