Java 如何正确删除Junit测试规则(DropwizardAppRule)

Java 如何正确删除Junit测试规则(DropwizardAppRule),java,junit,jersey,dropwizard,Java,Junit,Jersey,Dropwizard,我在几门考试课上绝望了。我想我缩小了问题的范围,但是我没有办法解决它 TLDR:如何正确拆除DropwizardAppRule实例 要在另一个类中使用不同的吗? 或者强制已配置的捆绑包从规则中刷新 为了测试我们应用程序的两种不同配置(配置包根据配置文件略有变化),我在测试中用不同的配置文件实例化了两个DropwizardAppRule。如果单独运行,测试可以正常运行,但是如果没有按照“正确”的顺序一个接一个地运行,则会出现错误 这个错误看起来像是一个副作用,我想我无法用另一个配置干净地重新启动

我在几门考试课上绝望了。我想我缩小了问题的范围,但是我没有办法解决它

TLDR:如何正确拆除DropwizardAppRule实例 要在另一个类中使用不同的吗?
或者强制已配置的捆绑包从规则中刷新


为了测试我们应用程序的两种不同配置(配置包根据配置文件略有变化),我在测试中用不同的配置文件实例化了两个
DropwizardAppRule
。如果单独运行,测试可以正常运行,但是如果没有按照“正确”的顺序一个接一个地运行,则会出现错误

这个错误看起来像是一个副作用,我想我无法用另一个配置干净地重新启动
DropwizardAppRule

我首先创建自定义规则来扩展第一个规则,然后创建单独的规则来实现TestRule(都是实例DropwizardAppRule),我尝试使用JUnit@After,尝试添加After规则。。。直到我没有主意了

最后,我回到了相互扩展的规则:通过将Ldap测试放在一个以“z”开头的包中,并将maven设置为按字母顺序运行测试来扩展和解决问题

我创造了如果有人想看一看

错误:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=text/html;charset=iso-8859-1, type=class org.ow2.petals.cockpit.server.resources.UserSession$CurrentUser, genericType=class org.ow2.petals.cockpit.server.resources.UserSession$CurrentUser.
 at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:231)
 at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
 at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085)
 at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
 at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:808)
 at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:326)
 at org.glassfish.jersey.client.InboundJaxrsResponse$1.call(InboundJaxrsResponse.java:115)
 at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
 at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
 at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
 at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:419)
 at org.glassfish.jersey.client.InboundJaxrsResponse.runInScopeIfPossible(InboundJaxrsResponse.java:267)
 at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:112)
 at org.ow2.petals.cockpit.server.security.UserSessionTest.testLogout(UserSessionTest.java:70)
我正在使用Dropwizard 1.1.4

复制:一个测试套件和另一个,仅更改执行顺序

在这一点上,任何意见都将非常感谢,我感觉我看错了方向。我知道这是一个非常模糊的问题,我很乐意通过一些输入来改进它


提前谢谢

出于好奇,如果您在套件之外运行测试,测试会通过吗?(即,您运行use maven以单独运行所有测试)DropwizardAppRule应在应用程序完成后将其删除,因此,它很可能不是在每个测试之前和之后运行,而是在所有测试之前和之后运行。是否可以通过记录规则规则执行时的输出,或在DropwizardAppRule代码中使用断点来确认?这些套件只是为了重现。测试都是单独通过的(maven和eclipse),以便在运行我必须操作执行顺序的所有操作时通过测试。只要从CockpitApplicationRule使用DropwizardApp的人比从CockpitLdapplicationRule使用DropwizardApp的人先运行,他们都会成功。我添加了断点,并在每次测试之间检查DropwizardAppRule的构造函数。我可以试着追踪更深入的内部,但我真的不知道什么是失败的,所以我不知道该寻找什么。。。有什么建议吗?我只是有点担心“在套件级别使用DropwizardAppRule可以加快测试运行,因为应用程序在整个套件中只启动和停止一次:”来自Javadoc