【问题标题】:Generic extension method testing通用扩展方法测试
【发布时间】:2011-07-27 20:03:43
【问题描述】:

我有一个非常简单的扩展方法,它受限于 IComparable 实例:

public static bool Between<T>(this T comparable, T min, T max) where T : IComparable<T>
{
    return comparable.CompareTo(min) >= 0 && comparable.CompareTo(max) <= 0;
}

哪种方法是测试此方法的正确方法?我尝试模拟 IComparable 实例无济于事......我使用 NUnit 和 Moq,但我真的是 TDD 的菜鸟。

【问题讨论】:

    标签: c# generics tdd extension-methods moq


    【解决方案1】:

    在 Moq 中尝试以下操作。这将测试该值实际上在提供的值之间的情况。

    var mock = new Mock<IComparable<string>>();
    mock.Setup(x => x.CompareTo("a")).Returns(1).Verifiable();
    mock.Setup(x => x.CompareTo("z")).Returns(-1).Verifiable();
    Assert.IsTrue(mock.Object.Between("a", "z"));
    mock.Verify();
    

    你可以很快地修改它来测试否定的情况

    【讨论】:

      【解决方案2】:

      没有必要嘲笑任何东西。您可以使用任何 IComparable 对象,例如整数或字符串。
      看看吧:

      [TestMethod]
      public void YourTestName()
      {
          Assert.IsTrue(2.Between(0, 5));
          Assert.IsFalse("a".Between("b", "d"));
      }
      

      保持简单。

      顺便说一句,我会将该方法重命名为 IsBetween 而不仅仅是 Between。我发现它更流畅。

      [TestMethod]
      public void YourTestName()
      {
          Assert.IsTrue(2.IsBetween(0, 5));
      }
      

      【讨论】:

      • 有趣。但我认为最好尝试所有 IComparables。
      • 你的扩展方法很简单。我认为不应该对它进行如此严格的测试。我会更多地关注具有经常变化的业务规则的方法。
      • 你是对的。而且它不是一种永远不会改变的方法,Between 的定义非常简单。但它更多的是一个方法问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      相关资源
      最近更新 更多