gpt4 book ai didi

c# - 有没有一种方法可以为一个接口(interface)编写测试,然后针对所有实现该测试的类对其进行测试?

转载 作者:太空宇宙 更新时间:2023-11-03 20:42:43 24 4
gpt4 key购买 nike

我已经检查过了.. similar question但我不相信答案...

我目前有一个接口(interface)仅由一个类实现,但迟早会发生变化。我目前有一个针对接口(interface)的测试,一开始的所有测试都以:

IFoo foo = GetConcreteFoo()

其中 GetConcreteFoo 类似于

IFoo GetConcreteFoo()
{
return new ConcreteFooA();
}

但是,当我获得 Foo 的更多实现时,是否有一种方法可以让所有测试针对所有不同的具体 foo 的列表运行?

我想如果没有办法,至少我可以将测试复制/粘贴到一个新文件中,使用具体类的名称,并更改 GetConcreteFoo 的返回对象...(并将原始文件从(IFooTests 更改为 IConcreteFooATests)。

我不认为这个方法特别糟糕..但它不是太优雅/聪明,因为它会针对所有具体实现运行相同的测试(文件)。

有没有办法让它做到这一点?

(我正在使用 MSTests)

谢谢!

最佳答案

不确定 MSTest,但我相信您可以使用 parameterised tests 在 NUnit 中执行此操作,例如使用实现类进行参数化并使用 Activator.CreateInstance 对其进行实例化。

然而,更深层次的问题是,你愿意吗?你没有说你的接口(interface)是什么样子,但拥有接口(interface)的通常原因是允许不同的实现。例如,如果您有一个带有 Area 属性的 IShape 接口(interface),那么 Circle、Square 和 RorschachBlot 将以不同的方式实现它。 IShape.Area 属性的测试可以可靠地断言什么?因此,一般来说,您实际上只能测试类和(具体的)方法。

当然,如果您的接口(interface)意在暗示接口(interface)规范之外的语义保证(例如,Area 始终大于 0),那么您可以针对您知道的所有实现进行测试。 (对于您在创建测试时不知道的实现,您必须依靠带外沟通这些额外的要求,例如通过文档,并相信实现者会遵守它们。发布代码契约(Contract)时,您将能够强加通过契约(Contract)类更可靠地满足此类要求。)

关于c# - 有没有一种方法可以为一个接口(interface)编写测试,然后针对所有实现该测试的类对其进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com