- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试测试一个已注入(inject)另一个 EJB 的 EJB。出于测试目的,我想对注入(inject)的 EJB 使用 stub 。我使用 openEJB 作为 EJB 的框架进行测试。
这是 EJB:
@Stateless
@Local(IService.class)
public class Service implements IService {
@EJB
private IBean bean;
@Override
public String doService(String data) {
return bean.process(data);
}
}
真正注入(inject)的EJB:
@Stateless
@Local(IBean.class)
public class Bean implements IBean {
private static Logger logger = Logger.getLogger(Bean.class);
@Override
public String process(String data) {
logger.info("Bean processing : " + data);
return "Bean processing : " + data;
}
}
EJB 的 stub 版本:
@Stateless
@Local(IBean.class)
public class BeanStub implements IBean {
private static Logger logger = Logger.getLogger(BeanStub.class);
@Override
public String process(String data) {
logger.info("Stub processing : " + data);
return "Stub processing : " + data;
}
}
以及使用的 JUnit 测试:
public class ServiceTest {
private static Logger logger = Logger.getLogger(ServiceTest.class);
private static InitialContext context;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
// openEJB
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");
p.put("openejb.altdd.prefix", "stub"); // use specific ejb-jar
p.put("openejb.descriptors.output", "true");
context = new InitialContext(p);
}
@Test
public void testServiceStub() {
try {
IService service = (IService) context.lookup("ServiceStubLocal");
assertNotNull(service);
String msg = service.doService("service");
assertEquals("Stub processing : service", msg);
} catch (NamingException e) {
logger.error(e);
fail(e.getMessage());
}
}
}
我尝试使用特定的 ejb-jar 来覆盖 stub EJB 对真实 EJB 的使用(我想在我的服务中使用“BeanStub”而不是默认的“Bean”):
<ejb-jar>
<enterprise-beans>
<session id="ServiceStub">
<ejb-name>ServiceStub</ejb-name>
<ejb-class>tests.Service</ejb-class>
<ejb-local-ref>
<ejb-ref-name>tests.Service/bean</ejb-ref-name>
<ejb-link>BeanStub</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
</ejb-jar>
不幸的是,我在声明 EJB 时遇到了问题:
Apache OpenEJB 3.1.4 build: 20101112-03:32http://openejb.apache.org/17:14:29,225 INFO startup:70 - openejb.home = D:\Workspace_Java\tests\testejb17:14:29,225 INFO startup:70 - openejb.base = D:\Workspace_Java\tests\testejb17:14:29,350 INFO config:70 - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)17:14:29,350 INFO config:70 - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)17:14:29,381 INFO config:70 - Found EjbModule in classpath: D:\Workspace_Java\tests\testejb\target\test-classes17:14:29,412 INFO config:70 - Found EjbModule in classpath: D:\Workspace_Java\tests\testejb\target\classes17:14:29,428 INFO config:70 - Beginning load: D:\Workspace_Java\tests\testejb\target\test-classes17:14:29,428 INFO config:70 - AltDD ejb-jar.xml -> file:/D:/Workspace_Java/tests/testejb/target/test-classes/META-INF/stub.ejb-jar.xml17:14:29,850 INFO config:70 - Beginning load: D:\Workspace_Java\tests\testejb\target\classes17:14:29,850 INFO config:70 - AltDD ejb-jar.xml -> file:/D:/Workspace_Java/tests/testejb/target/classes/META-INF/stub.ejb-jar.xml17:14:29,850 INFO config:70 - Configuring enterprise application: classpath.ear17:14:29,912 INFO config:70 - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)17:14:29,912 INFO config:70 - Auto-creating a container for bean ServiceStub: Container(type=STATELESS, id=Default Stateless Container)17:14:29,912 INFO options:70 - Using 'openejb.descriptors.output=true'17:14:29,912 INFO options:70 - Using 'openejb.descriptors.output=true'17:14:29,928 INFO config:70 - Dumping Generated ejb-jar.xml to: C:\TEMP\ejb-jar-6391test-classes.xml17:14:29,959 INFO config:70 - Dumping Generated openejb-jar.xml to: C:\TEMP\openejb-jar-6392test-classes.xml17:14:29,959 INFO options:70 - Using 'openejb.descriptors.output=true'17:14:29,959 INFO config:70 - Dumping Generated ejb-jar.xml to: C:\TEMP\ejb-jar-6393classes.xml17:14:29,975 INFO config:70 - Dumping Generated openejb-jar.xml to: C:\TEMP\openejb-jar-6394classes.xml17:14:30,006 INFO config:70 - Enterprise application "classpath.ear" loaded.17:14:30,084 INFO startup:70 - Assembling app: classpath.ear17:14:30,131 INFO startup:70 - Jndi(name=ServiceStubLocal) --> Ejb(deployment-id=ServiceStub)17:14:30,131 ERROR startup:46 - Jndi name could not be bound; it may be taken by another ejb. Jndi(name=openejb/Deployment/ServiceStub/tests.IService!Local)17:14:30,131 INFO startup:70 - Undeploying app: classpath.ear17:14:30,147 ERROR startup:50 - Application could not be deployed: classpath.earorg.apache.openejb.OpenEJBException: Creating application failed: classpath.ear: Unable to bind business local interface for deployment ServiceStub at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:679) at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:450)
方法或编写 ejb-jar 的方式有问题吗?
最佳答案
我在使用 OpenEJB 时也遇到了类似的问题和障碍。如果您需要对测试进行 stub 和模拟(谁不需要),请看看我最终设法处理它的人(在 OpenEJB 联合创始人 David 的大力帮助下)。在最新版本(3.1.4)中,OpenEJB 的工作方式与 Arquillian 非常相似,允许内部类测试驱动程序,无需 ejb-jar.xml 和类路径扫描。
我在这里描述了我的障碍:http://jakub.marchwicki.pl/posts/2011/07/01/testing-ejb-application-openejb-without-classpath-scanning/ 。看一下,也许这会让你的测试更容易。
关于java - 使用 stub 和 openejb 框架测试 ejb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5275487/
我有以下 Spring 代码要使用 Spock 进行测试: @Service @RequiredArgsConstructor public class MyService { private f
package main import ( "fmt" "github.com/hyperledger/fabric/core/chaincode/shim" pb "gith
我刚开始使用Wiremock,但对 stub 有疑问。 从文档看来,您似乎可以在映射下使用JSON文件,也可以在Java代码中使用代码stubFor(get(urlEqualTo(...。但是,我发现
我有以下要测试的对象: public class MyObject { @Inject Downloader downloader; public List readFi
我看到它被使用过很多次,但从未真正停下来质疑过它。现在我想知道 stub 和 stub 之间是否有区别! 有吗?还是历史原因? stub !意思是它 stub 一次?并返回到正常的方法调用? 最佳答案
在 Jasmine 中,如何创建一个纯 stub ,其中所有方法都已 stub 并返回未定义? 最佳答案 我认为没有任何现成的东西可以做到这一点,但您可以创建自己的。 describe('Stub a
两个类。父级:B。子级:A。A.method1() 覆盖 B 的。 public class B { protected boolean method1(){...}; } public cl
我有一个函数依赖于另一个函数,而不是测试依赖性我只想测试该依赖函数的特定结果。但是,当我对函数进行 stub 时,什么也没有发生,返回结果就好像我一开始就没有对函数进行 stub 一样。 示例代码:
这是要测试的代码: const AWS = require('aws-sdk'); const { APPLICATIONS, NOTIFICATION_FREQUENCIES } = req
背景 Any client socket program(C) over TCP/IP looks like, /* Socket creation */ sockfd = socket(AF_I
我正在尝试使用 stub 提供程序(我从 this 问题的答案中得到)和 stub 验证器来实现一个简单的同步适配器。对于身份验证,我使用了基本的 sync adapter example由谷歌提供。
与在测试点使用模拟框架(如 Rhino Mocks)相比,是否存在手动创建 stub 类型更有利的情况。 我们在项目中采用了这两种方法。当我查看一长串对象的 stub 版本时,我的直觉是它会增加维护开
我想 stub doSomething 来回调错误。但是,我只希望它在第一次响应时回调并出现错误。我想在第一次调用后恢复 stub 为了 stub 第一个调用,我可以这样做: var stub = s
我有一个 TimeMachine 类,它为我提供当前日期/时间值。该类看起来像这样: public class TimeMachine { public virtual DateTime Ge
如果我有一个 Rhino Mock 对象,它已经像这样声明了一个 stub 调用: mockEmploymentService.Stub(x => x.GetEmployment(999)).Retu
通常使用 Mockito,如果你 stub 一个被多次调用的方法,你会这样做 Mockito .doReturn(0) .doReturn(1) .doReturn(2)
逻辑 public class Logic { String date = (LocalDateTime.now()).format(DateTimeFormatter.ofPattern("yyyy
我想达到的目的 At the time of compilation, the compiler knew the function call was valid because you includ
这可能是一个简单的问题,但我无法缩短它。 我正在测试我的一个类,ClassToTest。在生产中,它将对第三方库对象(ThirdPartyClass 的实例)执行操作。 我想用 stub 模拟那个类。
我是 js 单元测试的新手,对使用 withArgs 进行 stub 有疑问。 我有一些名为“create”的通用外部函数,我只想为某种参数和原始“create”的其他返回值 stub 它。例如: s
我是一名优秀的程序员,十分优秀!