1

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

4

5 回答 5

2

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

这确保了所有实现者的一致性。如果您遇到实现者行为不同的情况(例如 NullReferenceException 与 ArgumentNullException),您可以添加测试来指定哪个是“正确的”,哪个是错误的。这会减少未来的惊喜。

我什至可以说每个接口都应该附有一组测试来描述预期的行为。

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

于 2010-11-29T10:42:16.733 回答
1

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

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

于 2010-11-29T10:37:06.250 回答
0

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

于 2010-11-29T10:37:28.107 回答
0

由于您的接口不应该有任何具体的实现,因此您不需要测试它,因为根据定义没有要测试的东西。测试应该针对接口的具体实现。

如果您发现自己需要部分实现接口,您可以按照我的方式进行操作。例如,假设我有一个项目的界面。我称之为IItem并拥有所有接口。然后我声明一个Itemwhich 是通用代码接口的部分实现,然后声明ItemA,ItemB等用于Item.

于 2010-11-29T10:44:34.227 回答
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")
   }
}

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

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

请对此发表评论。

于 2010-11-29T13:21:32.513 回答