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