Вам нужно создать экземпляр IComparable и для тщательности (истинного модульного тестирования), я хотел бы предложить издевательская библиотека с возможностью проверки звонков. Я бы, вероятно, использовал что-то вроде Мока. Вам понадобится объект, который реализует интерфейс, который у вас уже есть, или вы можете создать тестовый, без фактической реализации.
public class YourObject : IComparable<YourObject>
{
public virtual int CompareTo(YourObject other)
{
throw new NotImplementedException();
}
}
Я хотел бы сделать тонкие изменения код диапазона только немного для последовательности:
public class Range<T> where T : IComparable<T>
{
public T Minimum { get; set; }
public T Maximum { get; set; }
public Range(T minimum, T maximum)
{
Minimum = minimum;
Maximum = maximum;
}
public Boolean Contains(T value)
{
return (Minimum.CompareTo(value) <= 0) && (Maximum.CompareTo(value) >= 0);
}
}
Конечный результат одинаков, но он делает вещи немного проще при настройке издевается. Или вы можете пойти с value.CompareTo на обеих учетных записях. В любом случае это добавит немного большей последовательности.
тест код будет выглядеть немного как это:
var min = new Mock<YourObject>();
var max = new Mock<YourObject>();
var val = new Mock<YourObject>();
var range = new Range<YourObject>(min.Object, max.Object);
min.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(-1);
max.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(1);
Assert.True(range.Contains(val.Object));
min.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(0);
max.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(1);
Assert.True(range.Contains(val.Object));
min.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(-1);
max.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(0);
Assert.True(range.Contains(val.Object));
min.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(1);
max.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(1);
Assert.False(range.Contains(val.Object));
min.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(-1);
max.Setup(m => m.CompareTo(It.IsAny<YourObject>())).Returns(-1);
Assert.False(range.Contains(val.Object));
Теперь вы проверяете ваш класс Range содержит метод, а не способность объекта, чтобы вернуть правильное значение, когда это CompareTo называется.
Счастливое кодирование!
Существует ограничение, по которому вы должны протестировать свой класс, я думаю, этого будет достаточно, если вы проверите свой класс с единственным типом, который реализует 'IComparable', например. 'int', проверить все граничные случаи для' int' и предположить, что он будет работать с другими 'IComparables ', сделанными. –
csharpfolk
Если ваш класс ведет себя равномерно для всех 'T' (что ему нужно), вы можете просто указать конкретный' T' (например, 'int' в этом случае) для тестовых случаев. – Lee
@csharpfolk, который звучит разумно –