2011-04-01 58 views
3

我有一个非常简单的扩展方法是至极为contrained 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的noob。

回答

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

可以很快修改此测试阴性病例

5

没有必要嘲笑什么。您可以使用任何IComparable对象,如Integers或Strings。
检查出来:

[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)); 
} 
+0

有趣。但我认为尝试所有IComparables会更好。 – 2011-04-01 16:51:04

+0

您的扩展方法非常简单。我认为它不应该如此严重地测试。我将更多地关注那些经常变化的业务规则的方法。 – goenning 2011-04-01 16:54:13

+0

你说得对。这不是一个永远不会改变的方法,Between的定义非常简单。但它更多的是一个方法论问题。 – 2011-04-01 16:56:28