Java 如何使用Mockito设置struts 1.0表单类成员
我有一个struts 1.0表单bean,我正在尝试测试自定义验证 表单bean显式引用其类成员,即在验证电子邮件地址时,调用如下所示:Java 如何使用Mockito设置struts 1.0表单类成员,java,mockito,struts-1,Java,Mockito,Struts 1,我有一个struts 1.0表单bean,我正在尝试测试自定义验证 表单bean显式引用其类成员,即在验证电子邮件地址时,调用如下所示: @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); Validator validator = ESAPI.valid
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
Validator validator = ESAPI.validator();
try
{
email = validator.getValidInput("AuthorizedPayerEmailAddr", email, "Email", Email.MAX_ADDRESS_SIZE, true);
}catch(Exception e){ doStuff() }
email = validator.getValidInput("AuthorizedPayerEmailAddr", getEmail(), "Email", Email.MAX_ADDRESS_SIZE, true);
在我的测试类中,我尝试告诉Mockito调用setter和getter的实际方法:
AddAuthorizedPayerForm form = Mockito.mock(AddAuthorizedPayerForm.class);
Mockito.doAnswer(Answers.CALLS_REAL_METHODS.get()).when(form).getEmail();
Mockito.doAnswer(new CallsRealMethods()).when(form).setEmail(Mockito.anyString());
此技术导致未设置我的表单类成员
我唯一能让它起作用的方法就是嘲弄获得者
when(form.getEmail())。然后返回(emailString)代码>
然后通过如下方法更改form类以访问其字段:
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
Validator validator = ESAPI.validator();
try
{
email = validator.getValidInput("AuthorizedPayerEmailAddr", email, "Email", Email.MAX_ADDRESS_SIZE, true);
}catch(Exception e){ doStuff() }
email = validator.getValidInput("AuthorizedPayerEmailAddr", getEmail(), "Email", Email.MAX_ADDRESS_SIZE, true);
这正是我不想做的!我不想仅仅为了使其可测试而改变我的表单逻辑
附加上下文:有一些抽象方法可以在用户会话上下文中的运行时设置表单状态。我知道这是一个糟糕的设计(FormBean应该只是一个FormBean),但我无法修复它。此应用程序不使用任何dep注入,因此我需要对此表单进行模拟,但validate()
方法及其验证的表单字段除外。能否在表单上放置setter(从而不更改getter逻辑)直接在表单对象上设置变量作为测试设置的一部分?Mockito关闭了那扇门。因为我是从一个模拟实例开始的,所以对任何setter/getter对的调用都是手动进行的,而不涉及实际的代码?如果你嘲笑它,你怎么能测试它?我想我缺少了一些东西,我希望表单类上的所有方法/字段都被模拟,除了对setter/getter的调用和对validate()
方法的调用。当我翻阅文档时,看起来我需要使用spy
。