您好 假设我有一个接口A和一个实现A的B类。在我的测试类中,我创建了一个实现A和I的虚拟类“测试接口方法”现在我的问题是我应该测试B类“获取”的方法界面。
答案 0 :(得分:2)
通常,测试应该触及所有(可执行的)代码行。如果您正在实现一个接口,它会使它变得更容易,因为您可以编写构成接口“契约”的测试,现在测试适用于接口的所有实现者。
这确保了所有实现者之间的一致性。如果遇到实现者行为不同的情况(例如NullReferenceException vs. ArgumentNullException),您可以添加指定哪个是“正确”哪个错误的测试。这样可以减少意外情况。
我甚至可能会说每个接口都应附加一组测试来描述预期的行为。
当然,实现特定的东西只能在具体的实现者身上进行测试(例如“文件是否已写入?”与“记录是否已投入?”)。这些东西应该通过覆盖或lambdas提供给界面的测试套件。
答案 1 :(得分:1)
根据我的经验,您只需测试具体类及其与接口的交互。
也就是说,如果您具有实现A的具体类B,那么您只需测试B及其与其引用的其他对象的交互。
答案 2 :(得分:0)
是的,您的目标应该是通过测试获得100%的代码覆盖率
答案 3 :(得分:0)
由于您的界面不应具有任何具体实现,因此您无需测试它,因为根据定义没有任何内容可供测试。测试应该是接口的具体实现。
如果您发现自己处于需要部分实现接口的情况下,您可以按照我的方式执行操作。例如,假设我有一个项目的界面。我打电话给IItem
并拥有所有界面。然后我声明Item
,它是公共代码接口的部分实现,然后是ItemA
,ItemB
等,用于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")
}
}
但是如果要从具体实现仍然依赖的接口中删除一个方法,你肯定不应该删除该部分接口吗?
这是事实,但仍应在测试中执行,即测试。接口(应该)在开发中发挥重要作用,变化可能会产生巨大的问题。如果一个对象实现了一个接口,我认为这是应该如何测试它或类似的东西。
请对此发表评论。