我正在使用JUnit进行广泛测试,有时候 - 在调试我的代码时 - 我想(临时)只运行@Test我的一个@RunWith(Arquillian.class)测试类.目前我正在添加一个@Ignore到所有其他测试,并想知道是否@IgnoreOther存在类似的东西.
是否有更好的解决方案忽略所有其他测试?
我希望在arquillian.xml中有不同的容器配置,并在我的测试中选择它们.但我无法加载任何容器,但默认加载.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<arquillian
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/schema/arquillian"
xsi:schemaLocation="http://jboss.org/schema/arquillian http://www.jboss.org/schema/arquillian/arquillian_1_0.xsd">
<container qualifier="weld" default="false">
</container>
</arquillian>
Run Code Online (Sandbox Code Playgroud)
测试用例:
@Deployment(name="depl1")
@TargetsContainer("weld")
public static JavaArchive createTestArchive() throws UnsupportedEncodingException {
return ShrinkWrap
.create(JavaArchive.class, "test.jar")
.addClasses(SomeOtherCdiService.class)
.addAsManifestResource(new ByteArrayAsset(beansXmlContent.getBytes("utf-8")), ArchivePaths.create("beans.xml"));
}
@Test
@OperateOnDeployment("depl1")
public void shouldBeAbleToInjectInject() {
assertNotNull(someOtherCdiService);
}
Run Code Online (Sandbox Code Playgroud)
但测试没有开始,因为Arquilian找不到容器
org.jboss.arquillian.container.test.impl.client.deployment.ValidationException:DeploymentScenario包含与注册表中任何已定义Container不匹配的目标.焊接.可能的原因是:在Classpath上找不到可部署的容器,或者您已经使用@ org.jboss.arquillian.container.test.api.TargetsContainer值定义了@ org.jboss.arquillian.container.test.api.Deployment.任何找到/配置的容器(请参阅arquillian.xml容器@限定符)
我查看了源代码,发现Aquilian只找到了_DEFAULT_Container.
当我@TargetsContainer("weld")从部署方法中删除时,测试工作正常.所以我认为一般测试都没问题.
如果我将容器配置修改为default="true"(<container qualifier="weld" default="ture">)然后测试工作,测试也有效,所以我认为配置文件已加载.
有没有人知道出了什么问题?
细节
完成Stacktrace:
org.jboss.arquillian.container.test.impl.client.deployment.ValidationException:
DeploymentScenario contains targets not matching any defined Container in the registry. weld.
Possible causes are: No Deployable …Run Code Online (Sandbox Code Playgroud) 我尝试与Arquillian和Wildfly进行集成测试.
我在Maven中的依赖关系如下:
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.2.Final-wildfly-1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-arquillian-container-embedded</artifactId>
<version>8.0.0.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-embedded</artifactId>
<version>8.0.0.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
是否有必要同时包括wildfly-arquillian-container-embedded和wildfly-embedded?
运行测试时,我收到以下错误:
[main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider
Cannot not load JBoss LogManager. The LogManager has likely been accessed prior to this initialization.
[main] INFO org.jboss.msc - JBoss MSC version 1.2.0.Final
Feb 18, 2014 11:34:08 AM org.jboss.as.server.ApplicationServerService start
INFO: JBAS015899: WildFly 8.0.0.Final "WildFly" starting
Feb 18, 2014 11:34:13 AM org.jboss.as.controller.AbstractOperationContext executeStep
ERROR: JBAS014612: Operation …Run Code Online (Sandbox Code Playgroud) 我切换到Wildfly 8.1并且无法解决这个构建(路径)问题,这个问题最终会受到arquillian测试框架的影响.
pom.xml:
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.org.jboss.arquillian>1.1.5.Final</version.org.jboss.arquillian>
<version.org.wildfly>8.1.0.Final</version.org.wildfly>
<version.junit>4.11</version.junit>
</properties>
<profiles>
<profile>
<id>arquillian-jbossas-remote</id>
<dependencies>
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-arquillian-container-remote</artifactId>
<version>${version.org.wildfly}</version>
<scope>test</scope>
</dependency>
</dependencies>
</profile>
</profiles>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>${version.org.jboss.arquillian}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${version.junit}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.4.GA</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.protocol</groupId>
<artifactId>arquillian-protocol-servlet</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
</configuration> …Run Code Online (Sandbox Code Playgroud) 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) 我想使用Arquillian在嵌入式Glassfish上测试我的EJB.
重要的是我必须保持安全性,因为我的bean逻辑执行一些编程安全检查(sessionContext.isCallerInRole(role)).
是否可以在嵌入式Glassfish上使用Arquillian模拟登录?
如何设置Embedded Glassfish以使用用户和角色属性文件?
[编辑]
我找到了一个帖子,我决定遵循的方向(http://community.jboss.org/message/580290),但我仍然遇到问题.
1我arquillian.xml没被拿起
2我收到有关@Resource SessionContext
3的警告我无法获得正在运行的服务器的实例
SRC /测试/资源/ arquillian.xml:
<arquillian xmlns="http://jboss.com/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:glassfish="urn:arq:org.jboss.arquillian.container.glassfish.embedded_3">
<glassfish:container>
<glassfish:bindHttpPort>9090</glassfish:bindHttpPort>
<glassfish:instanceRoot>src/test/glassfish</glassfish:instanceRoot>
<glassfish:autoDelete>true</glassfish:autoDelete>
</glassfish:container>
</arquillian>
Run Code Online (Sandbox Code Playgroud)
我的测试:
@RunWith(Arquillian.class)
public class ArquillianTestCase {
@Deployment
public static JavaArchive createDeployment() {
final JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "test.jar")
.addClasses(FileBrowser.class, FileBrowserBean.class).addAsResource("META-INF/ejb-jar.xml")
.addAsResource("META-INF/glassfish-ejb-jar.xml");
return jar;
}
@EJB
private FileBrowser fileBrowser;
@Test
public void setupSecurity() throws Exception {
GlassfishTestHelper.createFileUser("user1", "xxx", "role1");
}
@Test
public void testLoadConfiguration() throws Exception {
final boolean loggedIn …Run Code Online (Sandbox Code Playgroud) 将Arquillian添加到Maven构建时,我在Eclipse中获得了上述异常:
缺少神器sun.jdk:jconsole:jar:jdk
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<version>1.1.7.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-persistence-dbunit</artifactId>
<version>1.0.0.Alpha7</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(消息不是问题,但Eclipse因为它而拒绝编译项目.不过Maven工作.)
当然,我做的第一件事就是尝试将其从Maven依赖项中排除(wildfly-arquillian-container-managed依赖树声明依赖性来自哪里):
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
<exclusions>
<exclusion>
<artifactId>jconsole</artifactId>
<groupId>sun.jdk</groupId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
没有变化.我尝试用Eclipse启动Eclipse -vm C:\Program Files\Java\jdk1.8.0_60\bin.并尝试在"首选项 - >已安装的JRE"中编辑JDK,以在工具目录中包含JAR.但没有任何作用.
我能做什么?
在检测到我的某个Web服务中存在缺陷后,我将错误跟踪到以下单行:
return this.getTemplate().getDomains().stream().anyMatch(domain -> domain.getName().equals(name));
Run Code Online (Sandbox Code Playgroud)
当我肯定地知道域名列表包含一个名称等于提供的域名时,该行返回false name.所以在我搔了一会儿之后,我最终分开整条线来看看发生了什么.我在调试会话中得到以下内容:
请注意以下行:
List<Domain> domains2 = domains.stream().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
根据调试器,domains是一个包含两个元素的列表.但申请后,.stream().collect(Collectors.toList())我得到一个完全空的名单.如果我错了,请纠正我,但根据我的理解,那应该是身份操作并返回相同的列表(如果我们是严格的话,还是它的副本).那么这里发生了什么?
在你问之前:不,我根本没有操纵过截图.
为了将其置于上下文中,此代码在有状态请求范围EJB中使用JPA管理实体执行,并在扩展持久性上下文中具有字段访问权限.在这里,您可以获得与手头问题相关的代码的一些部分:
@Stateful
@RequestScoped
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class DomainResources {
@PersistenceContext(type = PersistenceContextType.EXTENDED) @RequestScoped
private EntityManager entityManager;
public boolean templateContainsDomainWithName(String name) { // Extra code included to diagnose the problem
MetadataTemplate template = this.getTemplate();
List<Domain> domains = template.getDomains();
List<Domain> domains2 = domains.stream().collect(Collectors.toList());
List<String> names = domains.stream().map(Domain::getName).collect(Collectors.toList());
boolean exists1 = names.contains(name);
boolean exists2 = this.getTemplate().getDomains().stream().anyMatch(domain -> domain.getName().equals(name));
return this.getTemplate().getDomains().stream().anyMatch(domain -> domain.getName().equals(name));
} …Run Code Online (Sandbox Code Playgroud) 我想在同一个JUnit 4测试中使用Arquillian和PowerMock的功能.
问题是两个产品都是Runner应该使用的JUnit @RunWith,并且不可能@RunWith在同一个测试类上使用多个,或者将多个Runners类放在同一个@RunWith注释中.
你知道怎么办?
我有Java EE项目,我在JBoss 7(Windows)上使用JUnit进行Arquillian测试.测试工作正常,但我无法调试它们.
从我用Google搜索(https://community.jboss.org/wiki/WhyDontBreakPointsWorkWhenDebugging)我知道Arquillian测试正在单独的VM中运行,因此IntelliJ无法调试它们.我需要IntelliJ通过socket远程连接到那台机器,但我不知道该怎么做.
我找到了这个帖子:在IntelliJ中使用Arquillian进行调试 - 托管容器但是我不知道如何让它工作.
我也跨过了这个帖子:http://devnet.jetbrains.com/message/5253623?tstart = 0所以我希望在我的pom.xml中填充appropriet surefire部分,但它没有帮助:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<debugForkedProcess>true</debugForkedProcess>
<skip>false</skip>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
请问有人如何在这样的配置中调试测试吗?