Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写一个单元测试来检查它是否实现了一个接口有意义吗?_C#_Visual Studio 2010_Unit Testing_Testing - Fatal编程技术网

C# 写一个单元测试来检查它是否实现了一个接口有意义吗?

C# 写一个单元测试来检查它是否实现了一个接口有意义吗?,c#,visual-studio-2010,unit-testing,testing,C#,Visual Studio 2010,Unit Testing,Testing,如标题所示 我有一个实现IComparable的类,它需要排序。我编写了针对所有方法的所有单元测试。但是,编写一个单元测试来检查它是否实现了IComparable有意义吗 因为在UI中进行排序时,使用该接口将无法工作。但是编译它仍然可以工作。所以,如果我有这样的测试用例,那么如果有人删除了该接口,它就会被捕获 我的班级是这样的: public class ComparableCustomType: IComparable { private readonly someF

如标题所示

我有一个实现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);    
}
[TestMethod]
public void CompareTo_isimplementicomapperable()
{
IComparable compariable=Isolate.false.Instance();
Assert.AreNotEqual(空,可比较);
}
编辑:这就是我使用此属性的方式…(或者我应该说这就是人使用此属性的方式…)

公共类CustomItem{
private AnotherBusinessObject anotherBusinessObj=null
公共CustomItem(另一个BusinessObject obj)
{
this.anotherBusinessObj=obj;
}
公共可比客户类型{
获取{return new CamparableCustomType(this.anotherBusinessObj);}
}
公共字符串SomeOtherProperty{get;set;}
publci int ANOTHER属性{get;set;}
}
公共ObservableCollection MyCustomCollection{get;set;}

然后此集合将数据绑定到我的GridView。。。。因此,它将自动生成所有列….

我要说的是,不要测试编译器将为您捕获的任何内容。既然您遇到了编译器无法捕获的情况,那么为其创建UT似乎是合法的。

我想说,不要测试编译器将捕获的任何内容。既然你有一个编译器无法捕获的例子,那么为它创建一个UT似乎是合法的。

为了快速总结我的答案,我说不,编写一个单元测试来检查类实现/继承了什么没有多大意义。依我看,单元测试应该是为了测试逻辑/功能,而不是类型。这非常类似于编写测试以确保可以实例化构造函数。通常情况下,这样的事情是过分的,我相信这个案子也是过分的

应该在编译时检查代码。可以在实例化对象时应用此约束(如果您使用对象的方式可能)

假设实现
IComparable
的类称为
FooComparable

IComparable foo = new FooComparable();
同样,如果您已经实例化了该对象,并且它的唯一功能不一定是一个
IComparable
对象,那么您可以应用一些其他约束。假设您的
foo具有可比性
,并且您希望在将其绑定到控件之前确保它是
i可比的
,您可以执行以下操作:

IComparable dataSource = fooObj;

如果您尝试此操作,但FooComparable没有实现IComparable,编译器将抱怨。也许您应该提供一个如何使用该类的代码示例,以便我们提供更多建议。

为了快速总结我的答案,我说不,编写一个单元测试来检查类实现/继承了什么没有多大意义。依我看,单元测试应该是为了测试逻辑/功能,而不是类型。这非常类似于编写测试以确保可以实例化构造函数。通常情况下,这样的事情是过分的,我相信这个案子也是过分的

应该在编译时检查代码。可以在实例化对象时应用此约束(如果您使用对象的方式可能)

假设实现
IComparable
的类称为
FooComparable

IComparable foo = new FooComparable();
同样,如果您已经实例化了该对象,并且它的唯一功能不一定是一个
IComparable
对象,那么您可以应用一些其他约束。假设您的
foo具有可比性
,并且您希望在将其绑定到控件之前确保它是
i可比的
,您可以执行以下操作:

IComparable dataSource = fooObj;

如果您尝试此操作,但FooComparable没有实现IComparable,编译器将抱怨。也许您应该提供一个如何使用该类的代码示例,以便我们提供更多建议。

该类基本上有一个构造函数,它将以我可以用于排序的方式解析数据。IComparable只是让GridView/DataGrid知道这个自定义类型可以是sort。这个类基本上有一个构造函数,它将以一种我可以用来排序的方式解析数据。IComparable只是让GridView/DataGrid知道这个自定义类型可以是sort。所以它可以对列进行排序,这样就不会违反单元测试的任何规则了?我对单元测试不是很熟悉。我所知道的是,我们希望通过将不同的参数传递给不同的方法来了解对象的行为……这不会违反任何规则。单元测试的指导原则通常定义上限(例如,一次测试一个类,模拟其他类),编译器创建一个自然的下限。然而,看看jlafay的答案——如果他的答案对c#是正确的,也就是说,如果你能让编译器强制执行正确性,那么就这样做。这样就不会违反任何单元测试规则了?我对单元测试不是很熟悉。我所知道的是,我们希望通过将不同的参数传递给不同的方法来了解对象的行为……这不会违反任何规则。单元测试的指导原则通常定义上限(例如,一次测试一个类,模拟其他类),编译器创建一个自然的下限。但是,看看jlafay的答案——如果他的答案对于c#是正确的,也就是说,如果您可以让编译器强制执行正确性,那么就这样做。现在您如何在应用程序中实例化和使用对象?这正是我最好奇的地方。@jlafay这是c的一个属性