我应该测试实现它的Interface和All对象

时间:2010-11-29 10:32:54

标签: unit-testing xunit

您好 假设我有一个接口A和一个实现A的B类。在我的测试类中,我创建了一个实现A和I的虚拟类“测试接口方法”现在我的问题是我应该测试B类“获取”的方法界面。

5 个答案:

答案 0 :(得分:2)

通常,测试应该触及所有(可执行的)代码行。如果您正在实现一个接口,它会使它变得更容易,因为您可以编写构成接口“契约”的测试,现在测试适用于接口的所有实现者。

这确保了所有实现者之间的一致性。如果遇到实现者行为不同的情况(例如NullReferenceException vs. ArgumentNullException),您可以添加指定哪个是“正确”哪个错误的测试。这样可以减少意外情况。

我甚至可能会说每个接口都应附加一组测试来描述预期的行为。

当然,实现特定的东西只能在具体的实现者身上进行测试(例如“文件是否已写入?”与“记录是否已投入?”)。这些东西应该通过覆盖或lambdas提供给界面的测试套件。

答案 1 :(得分:1)

根据我的经验,您只需测试具体类及其与接口的交互。

也就是说,如果您具有实现A的具体类B,那么您只需测试B及其与其引用的其他对象的交互。

答案 2 :(得分:0)

是的,您的目标应该是通过测试获得100%的代码覆盖率

答案 3 :(得分:0)

由于您的界面不应具有任何具体实现,因此您无需测试它,因为根据定义没有任何内容可供测试。测试应该是接口的具体实现。

如果您发现自己处于需要部分实现接口的情况下,您可以按照我的方式执行操作。例如,假设我有一个项目的界面。我打电话给IItem并拥有所有界面。然后我声明Item,它是公共代码接口的部分实现,然后是ItemAItemB等,用于Item的特化。

答案 4 :(得分:0)

我读了你所有帖子我觉得这个解决方案效果最好。

Interface A
{
   String A1();
   String A2();
}

public class B:A
{
   String A1(){return "A1"}
   String A2(){return "A2"}
}

public class testB
{
   public void B_Can_Return_A1()
   {
      A b=new B();
      Assert.True(b.A1=="A1")
   }
}
  

但是如果要从具体实现仍然依赖的接口中删除一个方法,你肯定不应该删除该部分接口吗?

这是事实,但仍应在测试中执行,即测试。接口(应该)在开发中发挥重要作用,变化可能会产生巨大的问题。如果一个对象实现了一个接口,我认为这是应该如何测试它或类似的东西。

请对此发表评论。

相关问题