java – EJB没有接口视图测试(arquillain&mockito)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – EJB没有接口视图测试(arquillain&mockito),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2583字,纯文字阅读大概需要4分钟。
内容图文
![java – EJB没有接口视图测试(arquillain&mockito)](/upload/InfoBanner/zyjiaocheng/796/4778425c66c74837b6b47c1d26f5c606.jpg)
我正在研究Java EE 7(在wildfly 9.0.2上)应用程序,我偶然发现了一篇文章http://www.oracle.com/technetwork/articles/java/intondemand-1444614.html.主要是关于:
Premature Extensibility Is the Root of Some Evil
在我遇到的某些情况下这是有道理的.我已经将一些类更改为无接口视图.实现本身不是问题,但测试是.
例如,我有这两个类.
@Stateless
public class SomeBean {
public String getText()
{
return "Test text";
}
}
和
@Stateless
public class SomeOtherBean {
@Inject
private SomeBean someBean;
public String getText()
{
return someBean.getText();
}
}
我想以某种方式,someBean属性被覆盖,最好是一个模拟对象.不改变SomeBean和SomeOtherBean类.我已经尝试了一些例子,但它们没有用于例如:
https://github.com/arquillian/arquillian-showcase/tree/master/extensions/autodiscover/src/test/java/org/jboss/arquillian/showcase/extension/autodiscover
有没有人遇到过这个并有解决方案?
解决方法:
我最终使用了2个解决方案.
解决方案1:使用mockito进行内部或更小的测试
为了测试特定类,Mockito非常有用,因为它支持依赖注入.
@RunWith(MockitoJUnitRunner.class)
public class SomeOtherBeanTest {
@Mock
private SomeBean someBean;
@InjectMocks
private SomeOtherBean someOhterBean;
@Before
public void setUp() {
Mockito.when(someBean.getText()).thenReturn("Overwritten!");
}
@Test
public void testGetText() throws Exception {
assertEquals("Overwritten!", someOhterBean.getText());
}
}
解决方案2:使用@Produces和@Alternatives模拟外部服务(例如模拟OAuth2服务器)或更大的测试(例如集成测试)
首先,我创建一个新的@Alternative注释:
@Alternative
@Stereotype
@Retention(RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
public @interface CDIMock {}
然后将此作为构造型添加到arquillian beans.xml部署中:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
<alternatives>
<stereotype>com.project.CDIMock</stereotype>
</alternatives>
</beans>
之后在单独的类中创建一个新的@Producer方法:
public class SomeBeanMockProducer {
@Produces @CDIMock
public static SomeBean produce() {
SomeBean someBean = Mockito.mock(SomeBean.class);
Mockito.when(someBean.getText()).thenReturn("mocked");
return someBean;
}
}
将SomeBeanMockProducer类添加到arquillian部署中,您应该让它工作.
此解决方案的替代方法是使用@Specializes并扩展SomeBean实现.在我看来,这并没有给我足够的控制,比如@Alternative Mocking解决方案(在我的例子中是@CDIMock).
例如,假设我SomeBean具有调用远程服务器的方法.如果我为此添加一个方法并忘记在@Specializes类中@override它将进行真正的远程调用,这不是Mocking的情况.
内容总结
以上是互联网集市为您收集整理的java – EJB没有接口视图测试(arquillain&mockito)全部内容,希望文章能够帮你解决java – EJB没有接口视图测试(arquillain&mockito)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。