我在使用Spring和Struts的Java项目中使用Mockito,我在测试操作方面遇到了问题 .
我没有使用Struts2 jUnit插件来节省使用这种方法的测试时间:Strut 2.3.1.2 Unit test, how to remove Spring codependency vs NPE with getContext() .
问题是在我的操作中,当调用getText()时,我有一个NullPointerException .
我'm trying to spy this method, that's继承自ActionSupport,但我找不到办法,因为该测试中的操作是使用InjectMocks注释的 .
这是一个简单的类示例:
家长:
public class ActionSupport {
public String getText(String aTextName){
return this.getTextProvider().getText(aTextName);
}
}
我的行动:
public class MyAction extends ActionSupport {
@Autowired private IMyService myService;
public String execute(){
getText("SomeText");
myService.something();
return SUCCESS;
}
}
测试:
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@Mock private IMyService myService;
@InjectMocks private MyAction myAction;
@Before
public void before() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
myAction.execute();
}
}
我得到了这个例外:
java.lang.NullPointerException
at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:167)
at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:126)
at com.opensymphony.xwork2.util.TextParseUtil.translateVariables(TextParseUtil.java:48)
at com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage(LocalizedTextUtil.java:663)
at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:534)
at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:362)
at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:208)
at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:123)
at com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:103)
at es.MyAction.execute(MyAction.java:148)
如果我使用@Spy维护@InjectMocks来注释MyAction,我会得到一个StackOverflowError .
我怎样才能窥探ActionSupport.getText()并让mockito为我的动作注入嘲笑?
1 回答
我会避免使用
@InjectMocks
,因为它无声地失败 .只需使用
@Autowired
(即构造函数注入)向MyAction
添加构造函数 . 这也有助于保证所需的依赖性 .你不需要
initMocks
和MockitoJUnitRunner
.InjectMocks fails silently
Constructor injection discussion