3天前,我完成了Arquillian"入门"指南,并认为这对我的CQRS系统的单元测试是一件好事.
不幸的是,事实证明这比直接前进要少.我用google搜索了过去3天的问题,这个问题没有得到任何适用于其他人的解决方案的解决.
我得出结论,问题是我的代码,虽然我没有看到如何.
我的任务是编写一个事件监听器,监听ActiveMQ主题的事件,然后更新Mongo DB中的"视图".
系统中会有很多事件,所以创建一个所有事件监听器都扩展的抽象基类似乎是合理的.
此基类包含Mongo客户端和寄存器以侦听主题.它使用过载的getter作为侦听器名称,它在camel路由中用作bean引用.侦听器客户机ID是从静态长度生成的,该静态长度在每次侦听器注册时递增.这可确保每个侦听器都能看到发布到主题的每个事件.意图是稍后添加过滤器以减少收到的事件数.
我已经构建了这个代码,并从一个生成事件主题帖子的计时器驱动它,一切正常.
麻烦就是质量要求让cobertura通过单元测试报告80%的代码覆盖率.
我的测试应用程序不是单元测试,因此我的代码覆盖率为0%.
我通过CDI中的其他一些单元测试方法来到Arquillian,但如果我只能让它工作,Arquillian似乎是最好的选择.
我得到的错误是:
java.lang.IllegalStateException: Could not find beans for Type=class org.apache.deltaspike.core.impl.scope.window.WindowBeanHolder and qualifiers:[]
Run Code Online (Sandbox Code Playgroud)
我在pom中包含了deltaspike,我已经将它添加到了shrinkwrap部署中
POM提取物
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-api</artifactId>
<version>${deltaspike.version}</version>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-impl</artifactId>
<version>${deltaspike.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
<version>2.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
测试类@RunWith(Arquillian.class)公共类ListenerTest {
AbstractEventListener listener = null ;
WindowBeanHolder w = new WindowBeanHolder();
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class).addAsLibraries(Maven.resolver().loadPomFromFile("pom.xml")
.resolve("org.apache.deltaspike.core:deltaspike-core-api",
"org.apache.deltaspike.core:deltaspike-core-impl")
.withoutTransitivity().asFile())
.addAsWebInfResource("beans.xml");
}
@Test
public void testExecute() {
Assert.assertNotNull(listener);
}
}
Run Code Online (Sandbox Code Playgroud)
我的beam.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 …Run Code Online (Sandbox Code Playgroud) 我已经搜索并阅读了很多关于此的帖子,但找不到解决我的特定问题的方法。
在 centos lonux 盒子上运行 Sonar 时出现错误:
JDBCError: ERROR: no schema has been selected to create in: CREATE TABLE "schema_migrations" ("version" varchar(10485760) NOT NULL)
Run Code Online (Sandbox Code Playgroud)
我已经验证了声纳用户(我正在使用 sonarqube)可以访问数据库,它是自己模式的所有者,并且我已授予它对所有事物的所有权利,只是为了确保它不是权限问题。
我正在使用 Postgres 9.4。
完整日志如下,当尝试查看声纳 GUI 时,它仅显示一个包含以下文本的页面:
org.jruby.rack.RackInitializationException: ActiveRecord::JDBCError: ERROR: no schema has been selected to create in: CREATE TABLE "schema_migrations" ("version" varchar(10485760) NOT NULL)
from /opt/sonar/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract_adapter.rb:227:in `log'
from /opt/sonar/web/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/jdbc/adapter.rb:183:in `execute'
from /opt/sonar/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/schema_statements.rb:109:in `create_table'
from /opt/sonar/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/schema_statements.rb:371:in `initialize_schema_migrations_table'
from /opt/sonar/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/migration.rb:441:in `initialize'
from /opt/sonar/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/migration.rb:401:in `up'
from /opt/sonar/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/migration.rb:383:in `migrate'
from /opt/sonar/web/WEB-INF/lib/database_version.rb:62:in `upgrade_and_start'
from /opt/sonar/web/WEB-INF/lib/database_version.rb:73:in `automatic_setup'
from /opt/sonar/web/WEB-INF/config/environment.rb:272:in `(root)' …Run Code Online (Sandbox Code Playgroud)