我想定义一个抽象方法,以便在我的抽象类中使用此方法。 然后,我想在不同的类中定义这个抽象方法来扩展我的抽象类。
但我怎么能这样做?
(目标是为集成测试提供一些基本方法,它们都使用相同的“结构”,但实现了一些不同的逻辑)。
如何在抽象类中定义一个抽象方法WITH参数,在抽象类中使用这个抽象方法,但是在我的测试实现中首先实现该方法?
public abstract class BaseIT {
protected doVerify(String params..) {
if (isValid()) {
//basic verification for all extending testcases
}
}
protected abstract boolean isValid(Object o);
}
public class TestA_IT extends BaseIT{
@Test
public void myTest {
//do some specific stuff and verify with resulting params
doVerify(params..);
}
protected boolean isValid(Object o) {
return o.isValid();
}
}
请记住,这只是我问题的一个(愚蠢的)例子。当然我可以将isValid的结果交给基类方法,但在我的特定情况下,这可能不是这样。
问题是:Object o
是不同测试用例实现的不同对象。
我可能不会使用接口。我怎样才能做到这一点?
答案 0 :(得分:0)
让isValid
方法接收一个BaseIT对象并使TestA_IT
扩展BaseIT
。
答案 1 :(得分:0)
你可以这样做:
public class TestA_IT extends BaseIT {
@Test
public void myTest {
//do some specific stuff and verify with resulting params
doVerify(params..);
}
protected boolean isValid(Object o) {
return (o instanceOf YourObject) ? ((YourObject)o).isValid() : false;
}
}
更酷的方法是实现一个访客模式,但我认为你会很好。
答案 2 :(得分:0)
您可以定义Template method
,然后子类的实现将定义行为。
答案 3 :(得分:0)
你可以施展它:
((Class)o).isValid()
但我认为更好的方法是使用方法isValid()
创建一个接口。并将所有这些对象实现到它。
答案 4 :(得分:0)
您的示例令人困惑,因为您显示的两个类没有继承关系。在您澄清这一点之前,您是否考虑过将isValid()
方法设为通用和/或采用类型为isValid()
方法的接口类型的对象?
无论如何,请远离涉及演员表或instanceof
的解决方案。