我尝试使用mockmvc
在集成测试套件中测试@RestController
。
@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class WebControllerIT {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void getStatusReurnsSomething() throws Exception {
this.mockMvc.perform(get("/status")).andExpect(status().isOk());
}
}
@RestController
(WebController
)调用注入的@service
(RestClientService
),后者使用RestTemplate
调用另一个REST服务器。这导致运行测试时出现以下错误。
resourceAccessException:获取“http://test123.com/42/status”的请求时出现I/O错误:test123.com;嵌套异常为java.net.UnknownHostException:test123.com
我使用mockrestServiceServer
对@service
本身进行集成测试,但不知道如何在@restcontroller
的测试中存档。
如何模拟RestTemplate
的正确REST调用?
@RestController
类。
@RestController
public class WebController {
private final RestClientService service;
@Autowired
public WebController(RestClientService service) {this.service = service;}
@GetMapping("/status")
public String getStatus() {
// extract pid from database ...
int pid = 42;
return this.service.getStatus(42);
}
}
@service
类。
@Service
public class RestClientService {
private final RestTemplate restTemplate;
public RestClientService(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
public String getStatus(int pid) {
String url = String.format("http://test123.com/%d/status", pid);
return this.restTemplate.getForObject(url, String.class);
}
}
集成/单元测试不是这样工作的,这种测试的目标是运行您的代码,确保满足所有的业务需求,但不是访问其他系统或DB,在这里,您不应该访问test123.com来获取数据,这里需要做的是模拟该方法。
public String getStatus(int pid) {
String url = String.format("http://test123.com/%d/status", pid);
return this.restTemplate.getForObject(url, String.class);
}
这样控件就不会输入此方法,而是返回模拟数据(Dummy data)。
例如,假设该方法返回两种状态,您需要根据返回字符串进行一些业务验证。在这种情况下,您需要编写两个集成测试,并确保模拟方法返回两个不同的值(虚拟值,而不是到达终点)
我们之所以编写单元测试/集成测试,是为了确保您的整个代码按照预期工作,而不是从您的代码攻击其他系统。
我正在编写一个junit测试用例来测试rest调用。 我试图嘲笑售票服务,它工作正常,但当我在REST服务调用中嘲笑它时。它不嘲笑。 我正在使用springboot,mongodb与REST。 有什么解决这个问题的建议吗? }
我在JUnit中使用Mockito,并且我有一个使用RestTemboard向微服务发出请求的方法。 此方法返回一个JSON对象,该对象将在TokenRequestorPayload类中反序列化。 当我执行单元测试时,它们会失败,因为mock不起作用,我得到了一个org.springframework.web.client.ResourceAccessExcure。我怎么能嘲笑我的RestTem板
我对Spring MVC中的模拟服务有一个问题: 和测试: 问题是,为什么我从真正的服务而不是模拟中得到公司(公司1,公司2): 更新了测试类,删除了setUp并将@Bean更改为@MockBean,但保留@SpringBootTest并且它可以工作: }
我有以下服务: 和其他服务 我有我的Junit 当我在调试模式下运行这个测试时,我看到这个。合同服务。getInfo(multipartFileId) 正在返回我“null”。 我在嘲弄中错在哪里。 我刚刚在JUnit中嘲笑了ContractService。我还需要模拟AccountServiceImpl吗? 编辑:添加saveInCache和getInfo方法
我可以使用通过web服务请求授予的访问令牌,通过GoogleAPI访问网站管理员的网站列表,现在我想通过服务器到服务器请求来访问。 在授予服务器帐户访问列表的权限后,我不能使用下面的作用域正确使用setAssertionCreentials: 案例1 模拟用户帐户时: PHP客户端返回 案例2 在不模拟用户帐户的情况下,PHP客户端会得到一个空数组 问题 如何冒充用户使用服务器服务器谷歌为网站管理
我正在使用Modeshape rest服务器。Modeshape的版本是2.8.2。 当我向诸如这样的节点发送GET请求时,它会返回关于该节点的信息。 但是当我在同一个地址上发送删除请求(例如,使用Fiddler)时,它返回。根据文档,这样的地址应该支持删除请求。 更详细。我发送 我得到了 pom.xml,我正在使用它构建rest-server.war 我做错什么了吗? 而且我也在使用jboss-