我有我的DTO课程:
public class EmailResponse {
// Make public to avoid getters and setters
public Email email;
public RequestData reqData;
public EmailResponse() {
super();
}
}
我想实现这个界面:
public interface IAssertionErrorDo {
public void onErrorDo();
}
但我想在执行期间执行此操作,我不想触摸“EmailResponse”,因为由于它们不属于同一层而无法使其实现该接口,我的意思是,EmailResponse会属于服务层,IAssertionError属于测试层。我正在使用TestNG。
你知道我怎么做吗?此致
编辑: 我的实现是这样的:
EmailResponse emailResponse = emailService.getUserEmail(userId);
我之所以要这么做“注射”是因为我有
public class LoggingAssert
extends Assertion {
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingAssert.class);
private IAssertionErrorDo dataE;
@Override
public void onAssertFailure(IAssert a, AssertionError ex) {
LOGGER.info("[ERROR] " + a.getMessage());
if (this.dataE != null) {
this.dataE.onErrorDo();
}
}
public LoggingAssert setOnErrorDo(IAssertionErrorDo object) {
this.object = object;
return this;
}
}
loggingAssert.setOnErrorDo(emailResponse).assertNotNull(emailResponse.getEmail().getId(),
"Checking created email doesn't exists");
所以我想如果assert在emailResponse
中失败执行方法onErrorDo()答案 0 :(得分:2)
你可以做到
public class MyEmailResponse extends EmailResponse implements IAssertionErrorDo {
...
}
答案 1 :(得分:1)
在接口中实现调用,如果需要,可以通过添加逗号来分隔它们来调用多个接口。
调用接口方法只需使用方法的名称。
像这样:public class MyEmailResponse implements IAssertionErrorDo
{
public void onErrorDo() {//define it's behavior}
}
如果您扩展您使用的课程:
super.MyMethod()
在扩展类中调用一个方法,但是如果你已经有一个扩展类并且想要一个来自另一个类的方法,你必须首先为该类创建一个对象,然后调用它,因此:
MyClass mc = new MyClass();
如果它在不同的包中,那么
myPackage.MyClass mc = new myPackage.MyClass();
然后使用您创建的对象从该类调用您的方法,在本例中为mc .. so:
mc.MyMethod();
如果您希望它返回一个变量,那么您需要在该方法中添加一个返回语句,并使用您希望它返回的变量。
接口通常用于全局变化的环境(动态),例如,如果您开发了一个程序,并且需要一个驱动程序来连接数据库,那么您将创建一个接口并将其发送给数据库开发人员,每个人都将填写该界面中的代码并将其发回...这可以保证一致性。 当你实现一个接口时,你必须定义它内部的每个方法(即使你把它留空)你也不能改变界面的方法名称,也不能添加......它也用在其他领域,我不会# 39;认为你需要在你的情况下使用它。