@RunWith(MockitoJUnitRunner.class)
public class FeatureFlipperManagerTest {
@Autowired
RestTemplate restTemplate = new RestTemplate();
@Autowired
Service service = new Service();
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
@Test
public void test() throws Exception {
mockServer.expect(requestTo(Mockito.anyString()))
.andRespond(withSuccess("{\"enabled\":true}", MediaType.APPLICATION_JSON));
boolean res = service.isEnabled("xxx");
mockServer.verify();
Assert.assertEquals(true, res);
}
}
我有MockRestServiceServer来模拟服务中的restTemplete。但是它总是失败。它显示错误为java.lang.AssertionError: Further request(s) expected 0 out of 1 were executed
。任何人都可以让我知道我在哪里做错了。
服务本身将如下所示:
public class Service{
public boolean isEnabled(String xxx) {
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity("someurl",String.class);
if(...)return true;
return false;
}
}
首先,您的Service
类会在每个请求上创建一个RestTemplate的新实例。我不能足够强调这种不良做法。创建一个类型为RestTemplate的bean并将其注入到您的Service
bean中(它很可能已经创建-
取决于您使用的Spring MVC版本)。
一旦有了它,那么两个RestTemplates:一个在您的Service
bean中,另一个在其中注入,FeatureFlipperManagerTest
将是相同的,并且MockRestServiceServer
可以进行测试。
编辑-更明确地说:
将您的Service
班级修改为:
@Component
public class Service {
private RestTemplate restTemplate;
@Autowired
public Service(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public boolean isEnabled(String xxx) {
ResponseEntity<String> response = restTemplate.getForEntity("someurl",String.class);
if(...)return true;
return false;
}
}
和您的测试课程:
@RunWith(MockitoJUnitRunner.class)
public class FeatureFlipperManagerTest {
@Autowired
RestTemplate restTemplate;
@Autowired
Service service;
MockRestServiceServer mockServer = MockRestServiceServer.createServer(restTemplate);
@Test
public void test() throws Exception {
mockServer.expect(requestTo(Mockito.anyString()))
.andRespond(withSuccess("{\"enabled\":true}", MediaType.APPLICATION_JSON));
boolean res = service.isEnabled("xxx");
mockServer.verify();
Assert.assertEquals(true, res);
}
}
如果此操作失败,并说没有RestTemplate
bean,请粘贴您正在使用的Spring版本信息(Spring Boot?)。
问题内容: 我正在尝试编写一个JUnit测试用例,用于测试助手类中的方法。该方法使用REST调用外部应用程序,而这正是我试图在JUnit测试中模拟的调用。 helper方法使用Spring的RestTemplate进行REST调用。 在测试中,我创建了一个模拟REST服务器和一个模拟REST模板,并按如下所示实例化它们: 然后,我给模拟服务器添加种子,以便当助手方法进行REST调用时它应返回适当的
问题内容: 我只是想知道如何使用JavaScript模拟元素的点击。 目前我有: 但这不起作用:( 有任何想法吗? 问题答案: 这是我煮的 这很简单,但是有效: 用法:
代码示例: 第二个问题--模拟scala对象,似乎需要使用其他方法来创建这样的服务。
我需要卸载一个静态方法 public TestESMock()引发ConfigurationException{ 有人能告诉我怎么做吗。
我的测试存根是 我在这里做错了什么?
问题内容: 我有UIWebview,它可以对外部服务进行AJAX调用。离线时,我需要捕获这些请求并返回本地json。 我实现了NSURLProtocol并设法捕获AJAX请求,问题是jquery始终返回0错误代码: }); 我总是收到一个请求。状态= 0 为了测试我的协议,我尝试在html中模拟图像,并且效果很好。 从google.fr =>对图像的HTML请求 工作正常 在亚马逊=>上对json