【发布时间】:2023-04-04 19:20:02
【问题描述】:
这是我所拥有的,但 Assert 总是引发 AsserationException:
@Configuration
public class Config
@Bean
public HttpServletRequest request(){
HttpServleRequest mock = EasyMock.createMock(HttpServletRequest.class);
EasyMock.expect(mock.getParameter("test")).andReturn("123").anyTimes();
EasyMock.replay(mock);
return mock;
}
@Bean
MySerivce service(){
return new MyService();
}
@Bean
public ApplicationContextProvider context(){
return new ApplicationContextProvider();
}
}
这是服务MyService.java:
public class MyService{
public void assertHasRequest(@Value("#{request}") HttpServletRequest request)){
assert request != null;
}
}
测试:TestExpressions.java:
@RunWith(SpringJUnit4ClasssRunner.class)
@ContextConfiguration(classes=Config.class)
public class TestExpressions {
@Autowired
MyService service;
@Test
public void testService(){
service.assertHasRequest(null);
}
}
有什么想法吗?
【问题讨论】:
-
我不太确定你想要达到什么目的,但它看起来很整洁。在我看来有几个潜在的问题: 1) 当从“request()”方法返回时,mock 不处于重播模式。我想你想打电话给'EasyMock.replay(mock);'在返回之前。 2)assert语句是检查提供的值不为null,但你直接调用它以null为参数。当然它会抛出一个断言错误。您确定要注入请求对象并用它调用方法吗?
-
@DanTemple 1) 听起来合法但没有任何改变,我将此添加到问题中。 2) 是的。
-
酷,那么您可以按照我认为的测试类服务的相同流程进行操作。所以有一个名为 HttpServletRequest 类型的请求的变量,然后注释它@Autowired。然后你可以将它传递给你当前有 null 的 'assertHasRequest(request)' 方法。
-
@DanTemple 我在另一个测试中执行此操作,我喜欢测试
@Value而不是@Autowire。 -
好吧,我不确定这是否可能,但看看this example I found online 我想你想用
@Component标记MyService类,然后把@ComponentScan放在顶部你的配置类也是。虽然,我已经说过一些博客文章声称这种事情是不可能的。
标签: java spring junit4 easymock