Jersey是否提供任何方式来列出它所暴露的所有资源?也就是说,给定资源类:
package com.zoo.resource
@Path("/animals")
public class AnimalResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("dog")
public Dog getDog(){
...
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("cat")
public Cat getCat(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
泽西岛是否为我提供了获取信息的方式:
GET在路径/animals/dog返回类型Dog GET在路径/animals/cat返回类型Cat(此外,它是否为我提供了一种了解AnimalResource是资源的方法?)
我希望在单元测试中可以获得这些信息,以便我可以检查我公开的每个资源是否符合外部系统的预期.我知道有一个自动化暴露了application.wadl,但是我没有看到向我显示返回类型,我不知道如何从我的测试中访问它.
我是一个绿色开发人员,试图在大型多层java应用程序中处理错误处理(har-har).在很多情况下,我认为通过多个层次链接异常是一个好主意; 例如,当呼叫最低层的某些外部服务失败时,视图中会出现问题:
最重要的例外,我真正想要检查的栈跟踪,是链中的最后一个; 我提出了一个错误的请求,我需要修复foo的格式.但是当我让这个异常在层中冒泡时,很好地链接在对每个层都有意义的异常中...当我最终捕获并记录该事物时,默认的日志记录行为总是向我显示关于最外层异常的详细信息,以及可能是根本原因的5行堆栈跟踪.
这使得我希望在异常发生时记录它们,然后让它们冒泡,但最后你会记录大多数事情两次; 什么时候发生,什么时候最终被抓住
这里的最佳做法是什么?
我正在使用maven-jab2-plugin从XSD架构生成POJO.我生成的类没有任何集合的字段的setter.如何为集合生成setter?
任何人都可以解释默认情况下不启用setter的原因吗?
我将以我非常新的背景作为序言,一般没有太多的测试经验,以前从未使用过模拟框架。
我正在为访问许多不同 Web 服务的代码编写单元测试,我对此进行了嘲笑。我的许多测试验证了一个调用的结果,其中除了对 ServiceX 的调用之外,我的所有服务调用都成功。我的第一直觉是为@Before 块中的所有模拟设置happy-path 行为,然后为每个测试修改模拟行为。
@Before
public void init(){
when(serviceA.doSomething()).thenReturn(true);
when(serviceB.doSomething()).thenReturn(true);
when(serviceC.doSomething()).thenReturn(true);
when(serviceD.doSomething()).thenReturn(true);
when(serviceE.doSomething()).thenReturn(true);
}
@Test
public void testDoBusinessSuccess(){
String result = businessLogic.doBusiness();
assertThat(result, is("success"));
}
@Test
public void testDoBusinessFailureWhenServiceAFails(){
when(serviceA.doSomething()).thenReturn(false);
String result = businessLogic.doBusiness();
assertThat(result, is("service A is down!"));
}
@Test
public void testDoBusinessFailureWhenServiceBFails(){
when(serviceB.doSomething()).thenReturn(false);
...
Run Code Online (Sandbox Code Playgroud)
这使得每个测试用例都简洁,并且很容易看到正在测试的内容,因为我只指定了偏离规范的行为。
但是我怀疑这不是 Mockito 希望我设置模拟行为的方式,因为当我尝试验证 ServiceB 中的失败意味着 ServiceC 永远不会被命中时,我意识到我when(serviceC.doSomething())在 @Before 中的调用算作对 serviceC 的调用. 也就是说,我verifyZeroInteractions(serviceC)总是失败,因为我调用了when(serviceC.doSomething()).thenReturn(true),即使测试用例从未接触过 serviceC 。
那么最佳实践是什么?我是否最好在每次测试中为每个模拟明确设置行为,即使我会在所有地方重复几乎相同的 5 行?
java ×4
exception ×1
jax-rs ×1
jersey ×1
logging ×1
mockito ×1
reflection ×1
rest ×1
unit-testing ×1
xjc ×1