通用扩展方法测试

时间:2011-04-01 16:30:38

标签: c# generics tdd extension-methods moq

我有一个非常简单的扩展方法,它与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中的菜鸟。

2 个答案:

答案 0 :(得分:5)

没有必要嘲笑任何东西。您可以使用任何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));
}

答案 1 :(得分:3)

在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();

你可以相当快地修改它来测试负面情况