标题为。
我有一个实现IComparable的类,需要进行排序。我针对所有方法编写了所有单元测试。但是,编写单元测试以检查它是否实现IComparable是有意义的吗?
因为使用界面在UI中排序时它不起作用。但编译它仍然有效。因此,如果我有这样的测试用例,如果有人删除了该接口,则可以捕获。
我的班级是这样的:
public class ComparableCustomType: IComparable
{
private readonly someFields;
public ComparableCustomType(AnotherBusinessObject obj)
{
//Do some parsing against the obj
}
public int CompareTo(object obj)
{
//Some custom sorting logic
}
}
基本上我的测试用例是:
[TestMethod]
public void CompareTo_IsImplementIComaparable()
{
IComparable comparable = Isolate.Fake.Instance<ComparableCustomType>();
Assert.AreNotEqual(null, comparable);
}
编辑:这就是我使用这个属性的方式....(或者我应该说这个人是如何使用这个属性的......)
public class CustomItem{
private AnotherBusinessObject anotherBusinessObj = null
public CustomItem(AnotherBusinessObject obj)
{
this.anotherBusinessObj = obj;
}
public ComparableCustomType {
get { return new CamparableCustomType(this.anotherBusinessObj); }
}
public string SomeOtherProperty {get;set;}
publci int AnotherProperty {get;set;}
}
public ObservableCollection<CustomItem> MyCustomCollection {get;set;}
然后这个集合将数据绑定到我的GridView ....所以它会自动生成所有列.....
答案 0 :(得分:5)
为了快速总结我的答案,我说不,编写单元测试以检查类实现/继承的内容没有多大意义。 IMO,应该将单元测试写入测试逻辑/功能,而不是类型。这非常类似于编写测试以确保您可以实例化构造函数。通常类似的东西是矫枉过正的,我相信这种情况也是过度的。
应在编译时检查您的代码。您可以在实例化对象时应用此约束(如果您使用对象的方式可以这样做)。
假设您实现IComparable
的类名为FooComparable
:
IComparable foo = new FooComparable();
同样,如果您已经实例化了该对象,并且它的唯一功能不一定是IComparable
对象,那么您可以应用其他一些约束。假设您拥有FooComparable
,并且在将其绑定到控件之前确定它是IComparable
,您可以执行以下操作:
IComparable dataSource = fooObj;
如果你尝试这个并且FooComparable没有实现IComparable,编译器会抱怨。也许您应该提供一个代码示例,说明您如何使用该类,以便我们提供更多建议。
答案 1 :(得分:4)
我想说不要测试编译器会为你捕获的任何东西。既然您有一个编译器无法捕获的情况,那么为它创建一个UT似乎是合法的。