使用NMock的虚拟工厂方法帮助NUnit测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用NMock的虚拟工厂方法帮助NUnit测试相关的知识,希望对你有一定的参考价值。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using NMock2;
  5. using NUnit.Framework;
  6.  
  7. namespace NUnitSandbox
  8. {
  9. public interface IThingInterface
  10. {
  11. int GetThingNumber();
  12. }
  13. public class RealThing
  14. {
  15. public int GetThingNumber()
  16. {
  17. return 13;
  18. }
  19. }
  20.  
  21. public class ClassToBeTested
  22. {
  23. protected virtual IThingInterface GetThing()
  24. {
  25. return new RealThing() as IThingInterface;
  26. }
  27. public int WhatIsTheThingNumber()
  28. {
  29. IThingInterface iThing = GetThing();
  30. return iThing.GetThingNumber();
  31. }
  32. }
  33.  
  34. /// <summary>
  35. /// This class inherits from ClassToBeTested, so it can override the Virtual Thing Factory method (GetThing).
  36. /// </summary>
  37. [TestFixture]
  38. public class TestClass : ClassToBeTested
  39. {
  40. private Mockery mocks = new Mockery();
  41.  
  42. /// <summary>
  43. /// This is the key.
  44. /// </summary>
  45. protected override IThingInterface GetThing()
  46. {
  47. IThingInterface mockThing = mocks.NewMock<IThingInterface>();
  48. Expect.AtLeastOnce.On(mockThing).Method("GetThingNumber").Will(Return.Value(42));
  49. return mockThing;
  50. }
  51.  
  52. [Test]
  53. public void TestGetThingNumber()
  54. {
  55. Assert.AreEqual(42, this.WhatIsTheThingNumber(), "Get Thing Number value should return 42 as specified by the mock.");
  56. }
  57. }
  58. }

以上是关于使用NMock的虚拟工厂方法帮助NUnit测试的主要内容,如果未能解决你的问题,请参考以下文章

JAVA设计模式-创建模式-工厂模式-工厂方法模式/虚拟构造子模式/多态性工厂

如何使用 Laravel 8 中的工厂在 tinker 中创建虚拟表数据并连接它们?

欢迎加入测试梦工厂

自动化测试工具

工厂模式 - 工厂方法模式

23种设计模式——工厂方法模式对象创建