Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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#_Unit Testing - Fatal编程技术网

C# 测试抽象类的实现,许多构造函数

C# 测试抽象类的实现,许多构造函数,c#,unit-testing,C#,Unit Testing,我想测试抽象类。我编写了许多适用于抽象代码的测试方法。现在我想测试实现。我的测试类也是抽象的,它有方法MyAbstractClass CreateInstance()。不幸的是,我的实现有两个构造函数,每个构造函数有两个参数。我不想创建4个继承基本抽象测试的测试类,因为它的代码太多了。 是否可以使用不同的构造函数参数运行相同的测试?例如,我有一个测试方法XYZ,我想用抽象类的不同实例运行这个方法4次。您不能创建抽象类的实例,所以您无法测试它。就像你想测试一个接口 您只能测试派生类,或者如果需要测

我想测试抽象类。我编写了许多适用于抽象代码的测试方法。现在我想测试实现。我的测试类也是抽象的,它有方法
MyAbstractClass CreateInstance()
。不幸的是,我的实现有两个构造函数,每个构造函数有两个参数。我不想创建4个继承基本抽象测试的测试类,因为它的代码太多了。

是否可以使用不同的构造函数参数运行相同的测试?例如,我有一个测试方法XYZ,我想用抽象类的不同实例运行这个方法4次。

您不能创建抽象类的实例,所以您无法测试它。就像你想测试一个接口


您只能测试派生类,或者如果需要测试,就不要将类抽象化。

我想您可以将
CreateInstance()
替换为
CreateInstances()
,并在实例上迭代以测试它们


但是,一个包含两个完全不同的构造函数的具体实现可能是一种代码味道。

一个抽象类如何能够有一个方法来创建实例,我感到非常困惑。。。从定义上来说,这不是不可能吗?这种方法也是抽象的。您需要在继承的测试类中提供此方法的实现。为什么不使用一些模拟库呢?F.e NSubstitute.抽象部分不是在转移注意力吗?OP对此没有问题(他将创建一个具体的测试类),问题是如何使用多个构造函数测试一个类。我有很多抽象类的测试。在我的抽象测试类中,我有抽象的GetInstance方法。此方法应在继承的测试类中实现。继承的测试类将创建被测试抽象类的具体实现。可能是代码的味道,但第一个ctor将float[]作为参数,第二个short[]作为参数,所以只会发生很小的转换。如何使用MSTest工具迭代这些实例?有阁楼吗?测试前初始化?我认为在每个测试方法中使用foreach循环都不是一个好主意。我在抽象测试方法中使用foreach循环,这确实很奇怪,但确实起到了作用。如果我是你,我会为这两个构造函数编写两个不同的派生测试类。更多的工作,但更符合逻辑。我在guillaume31上做到了。但我认为还有更优雅的方式。